题目描述
评论
请你定义一个顺序栈,可以对顺序栈进行“将某个元素入栈”、“弹出栈顶元素”、“取栈顶元素(不删除)”、“判断栈是否为空”、“清空栈”等操作。键盘输入一些命令,可以执行上述操作。本题中,顺序栈元素为字符,顺序栈的最大长度为10。
输入描述
各个命令以及相关数据的输入格式如下:
将某个元素入栈:P,接下来一行是要入栈的元素
弹出栈顶元素:D
取栈顶元素(不删除):G
清空栈:T
判断栈是否为空操作:Y
当输入的命令为E时,程序结束
输出描述
当输入的命令为Y时,输出栈是否为空,如果栈为空输出Yes,栈不空输出No。
当输入命令G时,输出取出的栈顶元素
当输入命令D时,输出弹出的栈顶元素
注意:如果没有满足的元素,输出None,所有的元素均占一行
输入样例
P
1
P
2
D
G
Y
T
D
Y
P
3
P
4
G
E
输出样例
2
1
No
None
Yes
4
还是老样子,学校OJ不识别换行
#include<iostream>
const int maxsize=11;
using namespace std;
class stack
{
public:
int data[maxsize];
int top;
stack(){top=-1;};
void push(int num)
{
if(top==maxsize)cout<<"栈满";
data[++top]=num;
}
bool isempty(){
if(top==-1)return true;
else return false;
}
int pop1()//弹出
{
int x=-1;
if(isempty())return x;
else
{
x=data[top--];
return x;
}
}
int pop2()//不弹
{
int x=-1;
if(isempty())return x;
else
{
x=data[top];
return x;
}
}
void clear()//清空
{
top=-1;
}
};
int main()
{
stack sk;
char num;
int is=1;
int ans;
while(is>0)
{
int ans;
cin>>num;
switch (num)
{
case 'P':
cin>>ans;
sk.push(ans);
break;
case 'D':
ans=sk.pop1();
if(ans>0)cout<<ans;
else cout<<"None";
break;
case 'G':
ans=sk.pop2();
if(ans>0)cout<<ans;
else cout<<"None";
break;
case 'T':
sk.clear();
break;
case 'Y':
if(sk.isempty())cout<<"Yes";
else cout<<"No";
break;
case 'E':
is=-1;
break;
}
}
return 0;
}