双向队列
2015-11-12 09:14
323 查看
双向队列
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。现在给你一系列的操作,请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT
LOUT 表示出队操作;
输入
第一行包含一个整数M(M<=10000),表示有M个操作;以下M行每行包含一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
输出
输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;以下若干行处理不合法的命令(如果存在);
对于不合法的命令,请输出一行X ERROR
其中X表示是第几条命令;
示例输入
8 LIN 5 RIN 6 LIN 3 LOUT ROUT ROUT ROUT LIN 3
示例输出
3 7 ERROR
提示
来源
wanglin示例程序
#include<stdio.h> #include<string.h> struct node { int data[30000]; int top1; int top2; }S; int main() { int i,j,n,m,k,t; int a[10010]; char b[20]; scanf("%d",&n); S.top1=15000; S.top2=14999; j=0; for(i=1;i<=n;i++) { scanf("%s",b); if(strcmp(b,"LIN")==0) { S.top1--; scanf("%d",&S.data[S.top1]); } if(strcmp(b,"RIN")==0) { S.top2++; scanf("%d",&S.data[S.top2]); } if(strcmp(b,"LOUT")==0) { if(S.top1>S.top2) a[j++]=i; else { S.top1++; } } if(strcmp(b,"ROUT")==0) { if(S.top1>S.top2) a[j++]=i; else { S.top2--; } } } for(i=S.top1;i<=S.top2;i++) if(i==S.top1) printf("%d",S.data[i]); else printf(" %d",S.data[i]); printf("\n"); for(i=0;i<j;i++) printf("%d ERROR\n",a[i]); }
相关文章推荐
- Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs
- 创业的第六十五天
- oslec.lib找不到解决办法
- Bitcode是什么?
- boost::implicit_cast
- 链表-删除指定元素
- 《剑指offer》——数组中的逆序对
- C#中public、private、protected、internal、protected internal (转载)
- 子串
- fopen与open的区别
- IOS开发网络篇之──ASIHTTPRequest详解
- Array运用
- Script Send triggle mail for zabbix
- 谷歌开源人工智能系统 TensorFlow
- 素数
- Save a File on External Storage
- IIS 6文件解析漏洞
- WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁
- c语言的头文件-不是c++类的头文件?
- 【Unity实用小方法】随机生成不重复的数字