双向队列
来源:互联网 发布:linux mutex 编辑:程序博客网 时间:2024/05/01 18:50
Time Limit: 1000MS Memory limit: 65536K
题目描述
想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
现在给你一系列的操作,请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT
LOUT 表示出队操作;
输入
第一行包含一个整数M(M<=10000),表示有M个操作;
以下M行每行包含一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
输出
输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
以下若干行处理不合法的命令(如果存在);
对于不合法的命令,请输出一行X ERROR
其中X表示是第几条命令;
示例输入
8LIN 5RIN 6LIN 3
LOUTROUTROUTROUTLIN 3
示例输出
37 ERROR
双向队列就是队首和队尾都能进行增添和删除操作的队列。上面的题可以用一个数组去实现。
首先定义一个数组为队列,然后在使用双向队列的知识进行操作。
在左边增添的时候,要让数组里的数向后移一个位置。
在左边删除的时候,要让数组里的数向前移一个位置。
在每次删除操作时,要判断队列中有没有数,如果没有记下当前的步数。
#include <stdio.h>#include <string.h>int f[15000];int f1[15000];char st[10];int main(){ int n,i; while(~scanf("%d",&n)) { int jin=0,jin1=0,j,x; for(i=0; i<n; i++) { scanf("%s",st); if(strcmp(st,"LIN")==0) { scanf("%d",&x); jin++; for(j=jin-1; j>0; j--) { f[j]=f[j-1]; } f[0]=x; } else if(strcmp(st,"RIN")==0) { scanf("%d",&x); f[jin++]=x; } else if(strcmp(st,"LOUT")==0) { if(jin-1<0) { f1[jin1++]=i+1; } else { jin--; for(j=0; j<jin; j++) { f[j]=f[j+1]; } } } else if(strcmp(st,"ROUT")==0) { if(jin-1<0) { f1[jin1++]=i+1; } else { jin--; } } } for(i=0; i<jin; i++) { printf("%d",f[i]); if(i<jin-1)printf(" "); } printf("\n"); for(i=0; i<jin1; i++) { printf("%d ERROR",f1[i]); if(i<jin1-1)printf(" "); } printf("\n"); } return 0;}
0 0
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 展讯-sensor driver
- C++ zuoye
- SGU 411Petya the Hero(最长公共回文子串,AC自动机+n^2判断回文)(学习后缀数组的前奏)
- Unity3d 鼠标的事件GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp()
- 用python创建一个简单的restful风格的web服务应用
- 双向队列
- Android学习总结之—ListView调用notifyDataSetChanged无刷新
- 求叶子结点个数
- 南阳OJ 16 矩形嵌套
- 四种方案解决ScrollView嵌套ListView问题
- HDU—— 2140 Michael Scofield's letter
- Android EditText/TextView使用SpannableString显示复合文本
- 【JAVA_GUI】单文件 JAVA_GUI 矩阵链动态规划算法
- 【EJB2+JBOSS】定时服务