前言
作为STL库自带的数据结构,我就不多详细的解释了,主要记录一下手写的代码。
概念
一种先进后出的数据结构,可以视为有底瓶。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Static_Stack{ public: int top; int a[N]; void push(int x){ a[++top]=x; } void pop(){ top--; } bool empty(){ return top==0; } int query(){ return a[top]; } }ss;
|
例题
AcWing3302-表达式求值
经典例题,并且不是很好写,故留作记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<bits/stdc++.h> using namespace std;
stack<int> nums; stack<char> ops;
string str;
int count(){ char op=ops.top();ops.pop(); int n2=nums.top();nums.pop(); int n1=nums.top();nums.pop(); if(op=='+')return n1+n2; if(op=='-')return n1-n2; if(op=='*')return n1*n2; if(op=='/')return n1/n2; }
int main(){ cin>>str; int t;bool pd; for(int i=0;i<str.size();i++){ t=0;pd=false; while(str[i]<='9'&&str[i]>='0'){ pd=true; t=t*10+(str[i++]-'0'); } if(pd) nums.push(t); if(str[i]=='*'||str[i]=='/'){ while(!ops.empty()&&(ops.top()=='*'||ops.top()=='/')){ nums.push(count()); } ops.push(str[i]); } if(str[i]=='+'||str[i]=='-'){ while(!ops.empty()&&ops.top()!='('){ nums.push(count()); } ops.push(str[i]); } if(str[i]=='('){ ops.push('('); } if(str[i]==')'){ while(ops.top()!='('){ nums.push(count()); } ops.pop(); } } while(!ops.empty()){ nums.push(count()); } cout<<nums.top(); return 0; }
|
完结撒花o( ̄︶ ̄)o