4 4 FIFO IN 1 IN 2 OUT OUT 4 FILO IN 1 IN 2 OUT OUT 5 FIFO IN 1 IN 2 OUT OUT OUT 5 FILO IN 1 IN 2 OUT IN 3 OUT
1 2 2 1 1 2 None 2 3
队列是先进先出,栈是先进后出。
简单的模拟。
#include <stdio.h> #include <string.h> #include <queue> #include <stack> #include <algorithm> using namespace std; int main() { int t; char s[5]; scanf("%d",&t); while(t--) { int n,m; int i; int l=0; int a[222]; char s1[5]; queue<int>q; //队列 stack<int>Q; //栈 int flag=0; scanf("%d%s",&n,s); for(i=1;i<=n;i++) { if(strcmp(s,"FIFO")==0) { flag=1; scanf("%s",s1); if(s1[0]=='O' &&s1[1]=='U' &&s1[2]=='T' &&q.empty()) a[l++]=-444; // 队列为空的话赋值为负数,遇到这个数输出none。 if(s1[0]=='I' &&s1[1]=='N') { scanf("%d",&m); q.push(m);// 入队 } else { if(!q.empty()) { a[l++]=q.front();// 遇到OUT用a数组存栈的首元素 q.pop();// 弹栈 } } } else { flag=2; scanf("%s",s1); if(s1[0]=='O' &&s1[1]=='U' &&s1[2]=='T' &&Q.empty()) a[l++]=-444; if(s1[0]=='I' &&s1[1]=='N') { scanf("%d",&m); Q.push(m); } else { if(!Q.empty()) { a[l++]=Q.top(); Q.pop(); } } } }// 第二种栈的情况和队列一样,把小q改成大Q就好了 if(flag==1)// 第一种情况 { for(i=0;i<l;i++) { if(a[i]!=-444) printf("%d\n",a[i]); else printf("None\n"); } } else if(flag==2)//第二种情况 { for(i=0;i<l;i++) { if(a[i]!=-444) printf("%d\n",a[i]); else printf("None\n"); } } } return 0; }
HDU 1702 ACboy needs your help again! (栈与队列)
原文:http://blog.csdn.net/sky_miange/article/details/43609271