首页 > 其他分享 >双向队列

双向队列

时间:2022-11-18 16:43:17浏览次数:48  
标签:return 队列 Sq ++ int 双向 front rear


双向队列

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
<span style="color:#330033;">#include <stdio.h>  
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 11000
int a[11000],j;
typedef int element;
typedef struct
{
element *rear,*front;
int len;
} Sq;
int init(Sq &L)
{
L.front=new element[MAXSIZE];
if(!L.front)
exit(-1);
L.rear=L.front+5000;
L.front=L.rear;
L.len=0;
return 1;
}
int lpush(Sq &L,int x)
{
if(L.front>L.rear)
return -1;
*L.front=x;
L.front--;
return 1;
}
int rpush(Sq &L,int x)
{
if(L.front>L.rear)
return -1;
L.rear++;
*L.rear=x;
return 1;
}
int lpop(Sq &L,int i)
{
if(L.front==L.rear)
{
a[j]=i+1;
j++;
return 0;
}
L.front++;
return 0;
}
int rpop(Sq &L,int i)
{
if(L.front==L.rear)
{
a[j]=i+1;
j++;
return 0;
}
L.rear--;
return 0;
}
int pop(Sq &L)
{
while(L.front<L.rear)
{
if(L.front+1==L.rear)
printf("%d\n",*(++L.front));
else
printf("%d ",*(++L.front));
}
return 0;
}
int main()
{
int m,x;
char s[5];
Sq L;
j=0;
scanf("%d",&m);
init(L);
for(int i=0; i<m; i++)
{
scanf("%s",s);
if(!strcmp(s,"LIN"))
{
scanf("%d",&x);
lpush(L,x);
}
else if(!strcmp(s,"RIN"))
{
scanf("%d",&x);
rpush(L,x);
}
else if(!strcmp(s,"LOUT"))
{
lpop(L,i);
}
else
{
rpop(L,i);
}
}
pop(L);
for(int i=0; i<j; i++)
printf("%d ERROR\n",a[i]);
return 0;
}
</span>

 

 

标签:return,队列,Sq,++,int,双向,front,rear
From: https://blog.51cto.com/u_15879559/5868798

相关文章

  • 顺序队列及其操作
    一、顺序队列基本概念队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。插入的那端称为队尾,删除的那段称为队首,队列的插入和删除操作简称进......
  • Java阻塞队列
    ArrayBlockingQueue长度:固定(有界队列);锁类型:存取共用一个ReentrantLock锁,存取互斥;游标:两个index表示头和尾;阻塞条件:两个Condition标识空或者满,每次的存取操作都会唤醒对......
  • Vue双向绑定原理梳理
    简介vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。数据劫持通过Object.defineProperty()方法,Vue对数据的劫持主要分为两类,一类是对象,一类是数组......
  • 华普物联HP-ERS-T200,振动传感器监测方案,工业级双串口通信服务器,RS485/232转以太网双
    随着科技的进步,现在工业化设备正逐步走向复杂化、高速化、自动化。为了掌握设备运行状态、避免发生事故,对生产中的关键机组实行在线监测和故障诊断,也越来越引起人们的重视......
  • 线程与队列
    一、线程安全队列python内置的线程安全队列模块叫queuepython的Queue模块中提供了同步的、线程安全的队列类FIFO(先进先出)队列的Queue(常用)LIFO(后进先出)lifoQueue可以......
  • LinkedList双向链表
           ......
  • chrome 消息队列
    渲染进程微队列(最高优先级),如异步请求交互队列(高优先级),如点击事件延时队列(中优先级),如setTimeout//eg.functiona(){console.log(1);Promise.resolve......
  • LeetCode刷题(8)【栈&队列】用栈实现队列(C语言)
    用栈实现队列232.用栈实现队列-力扣(LeetCode)(leetcode-cn.com)类似题目——用队列实现栈​​LeetCode刷题(7)【栈&队列】用队列实现栈(C语言)_半生瓜のblog-CSDN博客​......
  • 【链表】双向循环带头链表-增-删-查(C语言)
    我的小站——半生瓜のblog——同步更新单链表存在的缺陷:不能从后往前走,找不到他的前驱,指定位置删除增加尾删都要找前一个,时间复杂度都是O(n)针对上面的这些缺陷的解决......
  • 【线性表】之队列(C语言)
    队列​​队列的概念​​​​结构定义​​​​初始化​​​​销毁​​​​队尾入​​​​队头出​​​​队头出​​​​队头数据​​​​队尾数据​​​​是否为空​​​​返......