双向队列
来源:互联网 发布:2016淘宝报名双11入口 编辑:程序博客网 时间:2024/05/01 10:41
题目描述
想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
现在给你一系列的操作,请输出最后队列的状态;
命令格式:
LIN X X表示一个整数,命令代表左边进队操作;
RIN X 表示右边进队操作;
ROUT
LOUT 表示出队操作;
输入
第一行包含一个整数M(M<=10000),表示有M个操作;
以下M行每行包含一条命令;
命令可能不合法,对于不合法的命令,请在输出中处理;
输出
输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
以下若干行处理不合法的命令(如果存在);
对于不合法的命令,请输出一行X ERROR
其中X表示是第几条命令;
示例输入
8LIN 5RIN 6LIN 3LOUTROUTROUTROUTLIN 3
示例输出
37 ERROR
#include <stdio.h>#include <stdlib.h>#include <string.h>int a[1100],top=-1,count=0;typedef struct node{ int data; struct node *next,*pre;}node;typedef struct{ node *front; node *rear;}L;node p;int init(L *q){ q->front=q->rear=(node *)malloc(sizeof(node)); if(!q->front)exit(-1); q->front->next=q->rear; q->rear->pre=q->front; return 1;}int Linsert(L *q,int e){ node *p; p=(node *)malloc(sizeof(node)); p->data=e; p->next=q->front->next; p->pre=q->front; q->front->next->pre=p; q->front->next=p; count++; return 1;}int Rinsert(L *q,int e){ node *p; p=(node *)malloc(sizeof(node)); p->data=e; p->next=q->rear; p->pre=q->rear->pre; q->rear->pre->next=p; q->rear->pre=p; count++; return 1;}int Lout(L *q){ node *p; p=q->front->next; q->front->next=p->next; p->next->pre=q->front; free(p); count++; return 1;}int Rout(L *q){ node *p; p=q->rear->pre; p->pre->next=q->rear; q->rear->pre=p->pre; free(p); count++; return 1;}int empty(L *q){ if(q->front->next==q->rear) {count++; return 0;} else return 1;}int main(){ int t,e,i; char c[10]; L q; node *p; scanf("%d",&t); init(&q); while(t--) { scanf("%s",c); if(!strcmp(c,"LIN")) { scanf("%d",&e); Linsert(&q,e); } else if(!strcmp(c,"RIN")) { scanf("%d",&e); Rinsert(&q,e); } else if(!strcmp(c,"LOUT")) { if(empty(&q)) Lout(&q); else a[++top]=count; } else { if(empty(&q)) Rout(&q); else a[++top]=count; } } p=q.front->next; printf("%d",p->data); p=p->next; while(p!=q.rear) { printf(" %d",p->data); p=p->next; } printf("\n"); for(i=0;i<=top;i++) printf("%d ERROR\n",a[i]); return 0;}
1 0
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 输入数字验证
- 04、CSS3伪类选择器
- JavaScript逻辑运算符中的"||"和"&&"
- 自动装箱、拆箱和String的相关问题
- javascript中的 document.body.clientHeight 和 document.documentElement.clientHeight 的区别
- 双向队列
- Oracle教育管理平台PL-SQL脚本之初期设计
- 主流脚本编程语言大比拼 优缺点一目了然
- Linux下基于socket多线程并发通信的实现
- setOnPageChangeListener 被改成了 addOnPageChangeListener
- MyEclipse使用总结——MyEclipse10安装SVN插件
- java 面试题收集
- MFC学习之 在按钮上加图标与文字共同显示
- iOS 架构(根据一些网上资料 整理希望大家能够用到)