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