📄 02.cpp
字号:
//stack.h
#include<iostream.h>
#include<stdlib.h>
const int MaxStackSize=50;
template<class T>
class Stack
{
private:
T stacklist[MaxStackSize];
int top;
public:
Stack();
T Peek() const;
void Push(const T& item);
T Pop();
void ClearStack();
int StackEmpty() const;
int StackFull() const;
};
template<class T>
Stack<T>::Stack():top(-1) { }
template<class T>
void Stack<T>::Push(const T& item)
{
if(top==MaxStackSize-1)
{
cerr<<"Stack overflow!"<<endl;
exit(1);
}
top++;
stacklist[top]=item;
};
template<class T>
T Stack<T>::Pop()
{
T temp;
if(top==-1)
{
cerr<<"Attempt to pop an empty stack!"<<endl;
exit(1);
}
temp=stacklist[top];
top--;
return temp;
};
template<class T>
T Stack<T>::Peek() const
{
if(top==-1)
{
cerr<<"Attempt to peek an empty stack!"<<endl;
exit(1);
}
return stacklist[top];
}
template<class T>
int Stack<T>::StackEmpty() const
{
return top==-1;
};
template<class T>
int Stack<T>::StackFull() const
{
return top==MaxStackSize-1;
};
template<class T>
void Stack<T>::ClearStack()
{
top=-1;
};
//main.cpp
#include"Stack.h"
void f()
{
Stack<char> s;
char op;
char op1;
cin>>op;
int n;
while(op!='=')
{
switch(op)
{
case '(': f();
break;
case ')': goto sto;
case '+':
case '-': if(s.StackEmpty()==0)
{
if (s.Peek()=='+'||s.Peek()=='-') {
op1=s.Pop();
cout<<op1;
s.Push(op);}
} else {
s.Push(op);}
break;
case '*':
case '/': if(s.StackEmpty()==0)
{
if (s.Peek()=='*'||s.Peek()=='/') {
op1=s.Pop();
cout<<op1;
s.Push(op);
}else {s.Push(op);}
}else {
s.Push(op);}
break;
default: cin.putback(op);
cin>>n;
cout<<n<<' ';
if (s.StackEmpty()==0)
if (s.Peek()=='*'||s.Peek()=='/') {
op1=s.Pop();
cout<<op1;}
}//end switch
cin>>op;
}//end while
sto: while(s.StackEmpty()!=1)
{op1=s.Pop();
cout<<op1;}
};
void main()
{
f();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -