题目描述:
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
输入:
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是”P’或”O’或”A’;假如是”P’,后面还会跟着一个整数,表示把这个数据压入堆栈;假如是”O’,表示将栈顶的值 pop 出来,假如堆栈中没有元素时,忽略本次操作;假如是”A’,表示询问当前栈顶的值,假如当时栈为空,则输出”E”。堆栈开始为空。
输出:
对于每组测试数据,根据其中的命令字符来处理堆栈;并对全部的”A’操作,输出当时栈顶的值,每个占据一行,假如当时栈为空,则输出”E’。当每组测试数据完成后,输出一个空行。
样例输入:
3
A
P 5
A
4
P 3
P 6
O
A
0
样例输出:
E
5
3
本人的程序:
#include<stdio.h>
#include<string.h>
int main(){
int zhan[10000],num,i,n,top;
char ch;
while(scanf(“%d”,&n)!=EOF){
getchar();
if(n==0)
break;
i=0;
top=-1;
while(i<n){
scanf(“%c”,&ch);
getchar();
if(ch==”A”){
if(top>=0){
num=zhan[top];
printf(“%d\n”,num);}
else if(top==-1)
printf(“E\n”);
printf(“\n”);}
else if(ch==”P”){
scanf(“%d”,&num);
getchar();
zhan[++top]=num;}
else if(ch==”O”){
if(top>-1)
top–;}
i++;
}
}
return 0;
}
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
输入:
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是”P’或”O’或”A’;假如是”P’,后面还会跟着一个整数,表示把这个数据压入堆栈;假如是”O’,表示将栈顶的值 pop 出来,假如堆栈中没有元素时,忽略本次操作;假如是”A’,表示询问当前栈顶的值,假如当时栈为空,则输出”E”。堆栈开始为空。
输出:
对于每组测试数据,根据其中的命令字符来处理堆栈;并对全部的”A’操作,输出当时栈顶的值,每个占据一行,假如当时栈为空,则输出”E’。当每组测试数据完成后,输出一个空行。
样例输入:
3
A
P 5
A
4
P 3
P 6
O
A
0
样例输出:
E
5
3
本人的程序:
#include<stdio.h>
#include<string.h>
int main(){
int zhan[10000],num,i,n,top;
char ch;
while(scanf(“%d”,&n)!=EOF){
getchar();
if(n==0)
break;
i=0;
top=-1;
while(i<n){
scanf(“%c”,&ch);
getchar();
if(ch==”A”){
if(top>=0){
num=zhan[top];
printf(“%d\n”,num);}
else if(top==-1)
printf(“E\n”);
printf(“\n”);}
else if(ch==”P”){
scanf(“%d”,&num);
getchar();
zhan[++top]=num;}
else if(ch==”O”){
if(top>-1)
top–;}
i++;
}
}
return 0;
}
解决方案
10
本人给个建议,用switch 和case,这样好一点
结构也清晰,你的思路没有错!估计一点小错误
调试一下就估计OK了!
结构也清晰,你的思路没有错!估计一点小错误
调试一下就估计OK了!
20
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
//请今后要用 int c; scanf("%c",&c); //时,都改为 char s[2]; int c; scanf("%1s",s); c=s[0];
10
scanf(“%d“,&n) 后面不需要用getchar