4099:队列和堆栈
总时间限制: 1000ms内存限制: 65536kB
描述
队列和堆栈是具有推送k和pop操作的两个重要数据结构。 push k将数字k添加到队列或堆栈中,pop从队列和堆栈中取一个数字。 队列和堆栈的区别在于取数的位置不同。
队列是先进先出的。 如果将队列视为一个横向通道,push k将k放在队列的最右边,pop从队列的最左边检索一个数。
栈是后进先出:如果把栈也看作是旁边的一个通道,那么push k把k放在栈的最右边,pop也从栈的最右边取出一个数。
假设队列和堆栈当前从左到右包含1和2的数字,push 5和pop操作示例如下:
推送5 pop队列12----125----25
推5 pop堆栈12----125----12
现在,假设队列和堆栈为空。 给定一系列推式k和pop操作后,输出存储在队列和堆栈中的数字。 如果队列或堆栈为空但接收到pop操作,则输出error。
输入
第一行为m表示有m组测试输入,m100。
每个组的第一行是n,下一行表示有n个推送或pop操作。 (n150 )
接下来的n行,每行是推式k或pop。 其中k是整数。
(输入以确保同时存在于队列或堆栈中的数量不超过100。)
输出
对各组的测试数据输出两行。 通常,第一行是从左到右存储在队列中的数字,第二行是从左到右存储在堆栈中的数字。 如果在操作过程中队列或堆栈为空但收到了pop,则输出error。 输出一共应该是2*m行。
样例输入
2
4
推1
推送3
pop
推送5
1
pop
样例输出
3 5
1 5
错误
错误
问题链接:Bailian4099队列和堆栈
问题简述(略)
问题分析
有关堆栈和队列的问题可以由C的容器处理。 知道堆栈和队列的规模后,用数组实现简单的堆栈和队列,其操作(进出堆栈、进出队列)可以用函数或简单的语句来实现。 这样简单的做法,往往是高效的方法。
程序说明(略)
参考链接(略)
题记:心中有数据结构,通过在数组中添加简单句就可以实现数据结构。
AC的c语言程序如下。
/* Bailian4099队列和堆栈*/# include stdio.h # include string.h # define n150 int stack [ n ],ps; int queue[N]、qh、qt; char cmd[5]; { int main(void ) intm,n,sflag,qflag,a,I; scanf('%d ',m ); while(m-- ) Scanf ) ' %d ',n ); sflag=qflag=0; ps=0,qh=0; qt=0; while(n-- ) scanf ) ' %s ',cmd ); if(cmd[1]=='u ' ) scanf('%d ',a ); stack[ps ]=a; queue[qt ]=a; }elseif(cmd[1]=='o ' ) if ) PS==0) sflag=1; if(Qt-qh==0) qflag=1; ps--; qh; }if(qflag ) printf(error(n ); ELSE{for(I=qh; i qt; I ) printf('%d ',queue[i]; 打印((n ); }if(sflag ) printf(error(n ); ELSE{for(I=0; i ps; I ) printf('%d ',stack[i]; 打印((n ); } } return 0; }