时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1864
解决:533
-
题目描述:
-
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,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
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7831-1-1.html
-
-
#include<stdio.h> int main() { int n; while(scanf("%d",&n) != EOF && n!= 0) { // getchar(); int stack[10000]; int top = -1; while(n > 0) { getchar();//最关键的要吸收字符!!! char cmd[10]; scanf("%s",&cmd);//九度的测试数据中POA后面可能有空格,要用%s。 //此处注意:scanf("%c%c",&a,&b)一次只是读入一个字符,输入m ,那么a='m',b=' '。 if(cmd[0] == 'P') { int push; scanf(" %d",&push); stack[++top] = push; //printf("%d\n",push); } if(cmd[0] == 'O') { int pop; if(top > -1) pop = stack[top--]; //printf("%d",pop); } if(cmd[0] == 'A') { int pop; if(top == -1) printf("E\n"); else printf("%d\n",stack[top]); } n--; } printf("\n"); } return 0; }
在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:scanf("%c%c%c",&a,&b,&c);输入为:d e f则把'd'赋予a, ' (空格)'赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。只有当输入为:def 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。 如果在格式控制中加入空格作为间隔,如 scanf ("%c %c %c",&a,&b,&c);则输入时各数据之间可加空格。我们用一些例子来说明一些规则:#include <stdio.h>void main(){char a,b;printf("input character a,b/n");scanf("%c%c",&a,&b); /*注意两个%c之间没有任何符号*/printf("%c%c/n",a,b);}由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符