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; }
/*表达式求值*/ 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; }