예제 #1
0
int main()
{
	Stack s;
	ElemType x;
	cout<<"(1)³õʼ»¯Õ»s"<<endl;
	InitStack(s);
	cout<<"(2)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
	cout<<"(3)ÒÀ´ÎÊäÈë×ÖĸÐòÁУ¬ÒÔ¡°#¡±½áÊø£º"<<endl;
	cin>>x;
	while( x!='#')
	{
		Push(s,x);
		cin>>x;
	}
	cout<<"(4)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
	cout<<"(5)Õ»³¤¶ÈStackLength(s):"<<StackLength(s)<<endl;
	cout<<"(6a)Õ»¶¥ÔªËØGetTop(s)Ϊ£º";
	cout<<GetTop(s)<<endl;
	cout<<"(6b)Õ»¶¥ÔªËØGetTop1(s,x)Ϊ£º"<<endl;
	GetTop1(s,x);
	cout<<x<<endl;
	cout<<"(7)´ÓÕ»¶¥µ½Õ»µ×ÔªËØPrintStack(s)Ϊ£º"<<endl;
	PrintStack(s);
	cout<<"(8)³öÕ»Pop1(s,x)µÄÔªËØΪ£º"<<endl;
	Pop1(s,x);
	cout<<x<<endl;
	cout<<"(9)³öÕ»ÐòÁÐ:"<<endl;
	while(!StackEmpty(s))
    {
        cout<<Pop(s)<<" ";
    }
    cout<<endl;
    cout<<"(10)ջΪ:"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
    cout<<"(11)ÒÀ´Î½øÕ»ÔªËØa,b,c:"<<endl;
    Push(s,'a');
    Push(s,'b');
    Push(s,'c');
    cout<<"(12)´ÓÕ»¶¥µ½Õ»µ×ÔªËØPrintStack(s)Ϊ£º"<<endl;
    PrintStack(s);
    cout<<"(13)Çå¿ÕÕ»ClearStack(s)"<<endl;
    ClearStack(s);
    cout<<"(14)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
    cout<<"(15)Ïú»ÙÕ»s:"<<endl;
    DestoryStack(s);
    cout<<"(16)Ïú»ÙÕ»ºóµ÷ÓÃPush(s,e)ºÍPrintStack(s)"<<endl;
    Push(s,'e');
    PrintStack(s);
	return 0;
}
int main(void)
{
	int input;
	ElementType tempcell;
	
	Stack P;
	P = IniStack();												//INISTACK
	while( scanf("%d", &input) )
	{
		tempcell.number = input;
		Push( P, tempcell );									//PUSH
	}
		PR(P);
	Pop( P );													//POP
	PR(P);	
	tempcell = TopOfStack( P );									//TopOfStack 
	Push( P, tempcell );
	PR(P);
	DestoryStack( P );
return 0;	
} 
예제 #3
0
파일: 93.c 프로젝트: JackDrogon/Study
/*表达式求值*/
BOOLEAN EvaluateExpression()
{
	int temp;//临时变量
	char theta;//存放操作符的变量
	int itheta;//存放出栈的操作符的变量add by me
	int a,b;//存放表达式运算时的中间值
	int topOpnd;//栈顶操作数
	char topOptr;//栈顶操作符
	
	Stack OPTR=InitStack();//操作符栈
	Stack OPND=InitStack();//操作数栈

	if(!Push(&OPTR,'#'))//操作符栈中的第一个为#字符
		return FALSE;

	GetInput();//从键盘获得输入

	while(Optr!='#'||GetTop(OPTR)!='#')
	{//如果Optr>=0,表示有操作数输入
		if(Opnd>=0)Push(&OPND,Opnd);
		switch(CheckPriority(GetTop(OPTR),Optr))
		{
		case '<'://栈顶元素优先权低
			if(!Push(&OPTR,Optr))return FALSE;
				GetInput();
			break;
		case '='://脱括号并接收键盘输入
			Pop(&OPTR,&temp);GetInput();
			break;
		case '>'://退栈并将运算结果入栈
			//先用itheta得到操作符在赋给theta
			Pop(&OPTR,&itheta);
			Pop(&OPND,&b);
			Pop(&OPND,&a);
			theta = (char)( itheta );
			Push(&OPND,Calc(a,itheta,b));
			Opnd=-1;
			break;

		}
	}
	//本算法中,当输入只有一个操作数然后就输入回车符时,
	//OPND.pTop==OPND.pBase
	//如果OPND.pTop==OPND.pBase并且Opnd<0,则说明用户
	//未输入任何操作和操作符而直接输入[回车],程序直接
	//退出运行
	if(OPND.pTop==OPND.pBase&&Opnd<0)
	{
		printf("\n\n感谢使用!\n");
		exit(1);

	}
	else if(OPND.pTop==OPND.pBase)
		Result=Opnd;
	else
	{
		Result=GetTop(OPND);
		DestoryStack(&OPND);
		DestoryStack(&OPTR);
	}
	return TRUE;

}