双向队列
来源:互联网 发布:俄罗斯 核武 知乎 编辑:程序博客网 时间:2024/05/01 09:16
将头和尾的初始值开大一些,否则会出现数组越界问题
#include<iostream>#include<algorithm>#include<string>using namespace std;const int maxn=100000+10;typedef struct{ int *data; int frot, rear;}Queue;void initqueue(Queue &q)///队列初始化{ q.data=new int [maxn]; q.frot=10001; q.rear=10000;}void display(Queue &q)///从头到尾输出元素数据{ for(int i=q.frot;i<=q.rear;i++) { if(i==q.frot) cout<<q.data[i]; else cout<<" "<<q.data[i]; } cout<<endl;}void renqueue(Queue &q, int key)///右进队{ q.data[++q.rear]=key;}void lenqueue(Queue &q, int key)///左进队{ q.data[--q.frot]=key;}void del(Queue &q, int k)///删除k位置上的元素{ q.frot++; for(int i=q.frot+k-2;i>=q.frot;i--) q.data[i]=q.data[i-1];}void rdequeue(Queue &q)///右出队{ q.rear--;}void ldequeue(Queue &q)///左出队{ q.frot++;}int empqueue(Queue &q){ if(q.rear<q.frot-1) { return 1; } return 0;}int judge[maxn];int main(){ ios::sync_with_stdio(false); Queue q; initqueue(q); int T; cin>>T; int num=1; int flag; int n=1; while(T--) { flag=0; string s; cin>>s; if(s=="LIN") { int x; cin>>x; lenqueue(q, x); /// display(q); } else if(s=="RIN") { int k; cin>>k; renqueue(q, k); /// display(q); } else if(s=="ROUT") { rdequeue(q); flag=empqueue(q); if(flag) { judge[n]=num; n++; q.rear++; } /// display(q); } else if(s=="LOUT") { ldequeue(q); flag=empqueue(q); if(flag) { judge[n]=num; n++; q.frot--; } /// display(q); } num++; } display(q); for(int i=1;i<n;i++) cout<<judge[i]<<" ERROR"<<endl; return 0;}
0 0
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- poj 3461 Oulipo (KMP||hash)
- Cocos2d creator js 使用javascript制作扑克游戏
- Android Accessibility(辅助功能) 学习
- java环境变量配置及运行流程
- 20160724 包
- 双向队列
- HDU 1084 What Is Your Grade?
- grebus
- poj-2773-Happy 2006
- <DATA-轉載>如何成为一名数据科学家?
- Java IO(六):RandomAccessFile
- Android 相机,视频录制
- select标签用法
- deploy mule community application