> 文档中心 > 【L2-033 简单计算器 】天梯赛L2系列详解

【L2-033 简单计算器 】天梯赛L2系列详解


天梯赛L2-033 简单计算器

题目详情:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:

这个题目应该是天梯赛L2里面最简单的了,只需要我们根据题目要求一步一步写出来代码就好了,只要堆栈不为空,一直运算就可以了。直接上代码吧。
最后总结一下,堆栈的相关知识。

详细代码:

#includeusing namespace std;int main(){stack<int>S1;//按照要求建立两个堆栈stack<string>S2;//为了比较的时候方便选择string而不是charint n;cin>>n;for(int i=0; i<n; i++)//把所有的数压入堆栈S1中{int x;cin>>x;S1.push(x);}string c;for(int i=0; i<n-1; i++)//把所有的运算符压入堆栈S2中{cin>>c;S2.push(c);}int a = 0;int b = 0;int num = 0;//每一次的运算结果while(!S1.empty() && !S2.empty())//其实只要!S2.empty()即可。因为题目要求S2内的元素总比S1少1个{ b = S1.top();//这里就按照题目要求:该弹出就弹出S1.pop();a = S1.top();S1.pop();c =  S2.top();S2.pop();//判断运算符是什么。这里注意://如果你定义的char类型的堆栈,要用strcmp函数去比较,而不是用"=="" if(c == "/"){    //运算的时候注意一下://运算顺序是先弹出的在运算符后面,后弹出的在前面if(b == 0){cout<<"ERROR: "<<a<<"/0\n";//这里打印完直接结束程序即可return 0;}else num = a / b;}else if( c == "+"){num = a + b;}else if( c == "-"){num = a - b;}else {num = a * b;}S1.push(num);//把运算结果重新压入堆栈中}cout<<S1.top(); }

知识总结:

1、一些stack的相关函数:

记住栈是后进先出(Last In First Out),并且都是在栈顶操作!s.push(X)//压栈操作,即在栈顶增加元素s.pop()//出栈操作, 删除栈顶元素但不返回其值s.top()//读取栈顶元素,并返回该元素s.empty()//判空操作s.size()//返回栈中元素个数  s.swap(x)//交换两个栈的元素

2、这里是我当时在B站上看陈玉老师上课讲顺序栈的代码

#includeusing namespace std;#define Maxsize 100typedef int ElemType ;/*静态数据结构 typedef struct SqStack{ElemType data[Maxsize];int top;//栈顶下标 }SqStack;*///动态数据结构 typedef struct SqStack{ElemType *base;//栈底指针 (只能指向空) ElemType *top;//栈顶指针 }SqStack;//*base和*top因为是用动态数组分配空间,所以二者相当于动态数组的首地址 bool InitStack(SqStack &S)//初始化一个栈 {S.base = new int[Maxsize];//动态数组-分配栈空间 if(!S.base)//判断是否分配成功     return false;S.top = S.base;//栈顶和栈顶指针指向同一地方即为空 return true; } bool Push(SqStack &S, int e)//入栈 {if(S.top - S.base == Maxsize)//判断栈是否满了     return false;*(S.top++) = e;//*为取值符号,然后是将e入栈 //*S.top = e; // S.top++;return true;}bool Pop(SqStack &S, int &e)//出栈(将e出栈) {if(S.base == S.top)//判断是否空栈     return false;e = *(--S.top);//S.top = S.top-1;//e = *S.top;return true;} int GetTop(SqStack S)//取栈顶元素 != 出栈顶元素 {if(S.top != S.base)//不是满栈     return *(S.top-1);//取出栈顶元素 S.top-1不是S.top--;else    return -1;}//top--,top的值发生变化,top-1,top的值不变 int main(){SqStack S;int e,choose;cout<<"1,初始化\n";    cout<<"2.入栈 \n";    cout<<"3.出栈 \n";    cout<<"4.取出栈顶元素\n";    cout<<"0.退出\n";     choose = -1;while(choose != 0){cout<<"请输入数:选择:"; cin>>choose; switch(choose) { case 1: if(InitStack(S))//初始化一个栈   cout<<"初始化一个空栈!\n";     break;      case 2: cout<<"请输入你要入栈的元素:"; cin>>e; if(Push(S, e))//入栈      cout<<"入栈成功\n"; else     cout<<"入栈失败\n"; break;  case 3: cout<<"出栈的元素:"; if(Pop(S, e))//出栈  { cout<<e<<endl; cout<<"出栈成功\n";} break; case 4: cout<<"取出栈顶元素:"; if(GetTop(S)) { cout<<GetTop(S)<<endl; cout<<"取出成功\n";} else     cout<<"取出失败\n"; break; case 0: break; }} return 0;}

杭州女装网