#includeint main() { char a[4000][20]={0};//存操作 int i=0, b[4000]={0}, shu=0; int shuchu[4000]={0}, k=0; while(scanf("%s",&a[i])!=EOF) //读取操作 { i++; } for(int r=0; r0)//stack内无元素,则忽略操作 { shuchu[k]=b[shu-1];//b【0】为stack底部,b【shu】为顶部 shu--;//stack上限下调,出stack k++;//这里是用一个数组存出stack的数,这样在最后就能输出从最开始为止每次出栈的元素 } } else//push { int flag=1;//判断一下push的是正负数,正为1,负数0 if(a[r][5]=='-')//判断push(后第一个是数码还是- { flag=0; //在循环内定义的变量为局部变量形参 int wei=6, shuzi=0; while(a[r][wei]>='0' && a[r][wei]<='9') { shuzi*=10;//每次循环通过*10使得整体上升一位,最后一位为0存新的数 shuzi+=a[r][wei]-48;//由于a存char,所以-48转换为数字 wei++; } shu++;//循环最后使stack上限+1 b[shu-1]=-shuzi;//由于为负数,故 } else//正数 { int wei=5, shuzi = 0; while(a[r][wei]>='0' && a[r][wei]<='9') { shuzi*=10; shuzi+=a[r][wei] - 48; wei ++; } shu ++;//循环最后使stack上限+1 b[shu - 1] =shuzi; } } } //这里是所有操作结束了 if(shu==0)//空stack ,只用输出shuchu { for(int p=0;p 0;p--)//stack顶至底部输出 printf("%d ",b[p]); printf("%dn",b[0]); } return 0; }
Description
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
栈是一个非常经典的数据结构。我们可以形象地想象一只桶,这只桶里面的元素是从下至上依次排列的,不存在两个元素在桶里的同一个高度。我们可以从桶的顶部往里面放入一个元素,这个操作称为入栈(push);也可以将其最上面的一个元素拿掉,这个操作称为出栈(pop)。显然,由于最顶上的元素“压着”其他元素,我们不能从栈的其他地方放入或者拿掉一个元素。
现在,为了更好地理解栈,请你编写一个程序来实现栈的各项操作。
Tips: 我们可以用数组来模拟栈的实现。声明一个数组stack来存储栈内元素,一个整型变量top来表示栈顶在数组中的位置。
Input
输入有若干行,你要对每一行的命令进行相应的操作。
对于每一行,有一个字符串,表示要进行的操作名称。
若为push(x),则表示将这个整数x入栈。
若为pop,表示按照规则将栈内一个元素出栈,若栈内无元素,忽略此次命令。
若为sequence,从栈底至栈顶输出此时的栈内元素,以一个空格分隔每个元素
Output
输出应有若干行,表示按照要求所进行的输出,每次输出操作占一行。
在所有操作结束以后,若栈非空,按照出栈规则将栈内元素依次出栈,直至栈内无元素,然后输出从最开始为止每次出栈的元素,以一个空格分隔每个元素。
对于上述的每一行输出操作,若该次操作没有任何元素需要输出,输出一个空行。
Sample Input
push(3)
push(6)
push(9)
sequence
pop
push(7)
push(13)
sequence
Sample Output
3 6 9
3 6 7 13
9 13 7 6 3
Sample Explanation
对样例中每次操作的具体情况进行更详细的说明
3入栈,栈内元素3,无出栈元素
6入栈,栈内元素3 6,无出栈元素
9入栈,栈内元素3 6 9,无出栈元素
输出栈内元素
栈顶元素9出栈,栈内元素3 6,出栈序列9
7入栈,栈内元素3 6 7,出栈序列9
13入栈,栈内元素3 6 7 13,出栈序列9
输出栈内元素
随后13、7、6、3依次出栈,出栈序列即为9 13 7 6 3
Hint
-10000≤x≤10000,总操作数≤3000



