宇神完成了栈的实验要求后,他又很是开心,刚要出去五排, 菌菌子突然问道老师让做的队列的那个实验你写完了么,宇神顿时大呼悲哉。。。。他给忘记了,怎么办。。明天就要上交实验报告了,你能帮他搞定么???
你需要完成三种操作1.enqueue x,将元素x插入队尾。2.dequeue,若队列非空,则删去队头元素,并输出该元素。3.query,从队头开始删除所有元素,并输出。
Input
本题有多组测试数据,每组数据首先输入一个T,接下来T行是T种对队列的操作。 (0< T < 100,0< x <= 500)
Output
每次执行dequeue操作时删除队头元素输出并换行,如果队列为空输出“this is empty!”并换行。
每次执行query操作时删除所有元素队列内所有元素并输出,每个元素占一行,如果栈为空输出“this is empty!”并换行。
每组数据后有一个空行。
Sample Input
10 enqueue 1 enqueue 2 enqueue 3 enqueue 4 query dequeue enqueue 1 dequeue query dequeue
Sample Output
1 2 3 4 this is empty! 1 this is empty! this is empty!
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
while(~scanf("%d",&m))
{
queue<int>q;
char a[m][1000];
int b[10000];
getchar();
for(int i=0;i<m;i++)
{
scanf("%s",a[i]);
if(a[i][0]=='e')scanf("%d",&b[i]);
if(a[i][0]=='e')q.push(b[i]);
if(a[i][0]=='d')
{
if(!q.empty())
{
printf("%d\n",q.front());
q.pop();
}
else printf("this is empty!\n");
}
if(a[i][0]=='q')
{
if(!q.empty())
{
while(!q.empty())
{
printf("%d\n",q.front());
q.pop();
}
}
else printf("this is empty!\n");
}
}
printf("\n");
while(!q.empty())
{
q.pop();
}
}
return 0;
}
总结:刚开始接触栈和队列的时候并不是很能理解,但是在对几个题目进行研究与思考后有了一定的了解,但任然不够全面,要注意的是选取在链表的头部实现并不是说在链表的尾部不能进行。