数据结构实验之栈与队列十一:refresh的停车场

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

refresh最近发了一笔横财,开了一家停车场。由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多。当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先

进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆。现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表示车牌号为num的车辆要进入停车场或便道,

Del 表示停车场中出去了一辆车,Out 表示便道最前面的车辆不再等待,放弃进入停车场)。假设便道内的车辆不超过1000000.

Input

输入为多组数据,每组数据首先输入N和M(0< n,m <200000),接下来输入M条命令。

Output

输入结束后,如果出现停车场内无车辆而出现Del或者便道内无车辆而出现Out,则输出Error,否则输出停车场内的车辆,最后进入的最先输出,无车辆不输出。

Sample Input

2 6

Add 18353364208

Add 18353365550

Add 18353365558

Add 18353365559

Del

Out

Sample Output

18353365558

18353364208

这道题集中考了栈和队列的基本操作,停车场可以看作是栈,便道可以看作是队列。

注意如果指令错误只要在最后输出一个“Error”就可以了,不需要其他输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct node
{
char s[25];
struct node *next;
}Node; typedef struct stack
{
Node *top,*base;
int len;
}Stack; typedef struct line
{
Node *front,*back;
int len;
}Line; Node *newnode()//开辟新节点
{
Node *t;
t = (Node*)malloc(sizeof(Node));
t->next = NULL;
return t;
} /************栈的基本操作************/
Stack *newstack()//建立新栈
{
Stack *t;
t = (Stack *)malloc(sizeof(Stack));
t->top = newnode();
t->base = t->top;
t->len = 0;
return t;
} void push_stack(Stack *t,char x[])//入站
{
Node *p = newnode();
strcpy(p->s,x);
p->next = t->top->next;
t->top->next = p;
t->base = p;
t->len++;
} void pop_stack(Stack *t)//出栈
{
Node *p;
p = t->top->next;
t->top->next = t->top->next->next;
free(p);
t->len--;
} int empty_stack(Stack *t)//询问栈是否为空
{
if(t->top->next==NULL)
return 1;
return 0;
} void clear_stack(Stack *t)//清空栈
{
while(!empty_stack(t))
pop_stack(t);
} /************队列的基本操作************/
Line *newline()//新队列
{
Line *t;
t = (Line*)malloc(sizeof(Line));
t->front = newnode();
t->back = t->front;
t->len = 0;
return t;
} void push_line(Line *t,char x[])//入队
{
Node *p = newnode();
strcpy(p->s,x);
t->back->next = p;
t->back = p;
t->len++;
} void pop_line(Line *t)//出队
{
Node *p;
p = t->front->next;
t->front->next = t->front->next->next;
t->len--;
free(p);
} int empty_line(Line *t)//判断队列是否为空
{
if(t->front->next==NULL)
return 1;
else
return 0;
} void clear_line(Line *t)//清空队列
{
while(!empty_line(t))
pop_line(t);
} void show(Node *t)
{
Node *q;
q = t->next;
while(q)
{
printf("%s\n",q->s);
q = q->next;
}
} int main()
{
int n,m,f;
Line *q;
q = newline();
Stack *p;
p = newstack();
char s[10],a[25];
while(scanf("%d%d",&n,&m)!=EOF)
{
clear_line(q);
clear_stack(p);
f = 1;
while(m--)
{
scanf("%s",s);
if(strcmp(s,"Add")==0)//如果栈满了就入队,否则入栈。
{
scanf("%s",a);
if(p->len<n)
push_stack(p,a);
else
push_line(q,a);
}
else if(strcmp(s,"Del")==0)//可以看成出栈
{
if(empty_stack(p))
f = 0;
else
{
pop_stack(p);
if(!empty_line(q))//队列不为空则出队入栈,即便道中的车进入停车场。
{
strcpy(a,q->front->next->s);
pop_line(q);
push_stack(p,a);
}
}
}
else if(strcmp(s,"Out")==0)//可以看成出队
{
if(empty_line(q))
f = 0;
else
pop_line(q);
}
}
if(!f)
printf("Error\n");
else
show(p->top);
}
return 0;
}

SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场的更多相关文章

  1. 数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时 ...

  2. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  3. SDUT-1479_数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用 ...

  4. SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...

  5. SDUT-3334_数据结构实验之栈与队列七:出栈序列判定

    数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...

  6. SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值

    数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...

  7. SDUT-2134_数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...

  8. SDUT-2133_数据结构实验之栈与队列三:后缀式求值

    数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...

  9. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

随机推荐

  1. 【python之路42】web框架们的具体用法

    Python的WEB框架 (一).Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. p ...

  2. 整体二分(模板) 求区间第k小

    整体二分,将询问与初值一起放入一个结构体里,然后每次二分判断询问在哪边,树状数组维护,时间复杂度O((n+Q)lognlogMAX_a[i] 代码 #include<iostream> # ...

  3. 锋利的jQuery学习笔记之jQuery选择器

    在介绍jQuery选择器之前,先简单介绍一下CSS选择器---> 一.CSS选择器 常见的CSS选择器有以下几种: 选择器 语法 描述 示例 标签选择器 E{CSS规则} 以文档元素为选择符 t ...

  4. 3D hover文字特效

    body { font-family: 'Source Sans Pro', Arial, sans-serif; background: #becccc; text-transform: upper ...

  5. python基础--数据类型的常用方法2

    列表及内置方法: count():查询元素的个数 clear():清空当前对象 reverse():对当前对象进行反转 sort():对当前对象中的元素进行排序 总结: 能存多个值 有序的 可变的 队 ...

  6. 安装scrapy问题:-bash:scrapy:command not found

    但是可以import,于是添加python3.5到环境变量,搞定 export PATH=$PATH:/usr/local/python3./bin/

  7. VMware workstation12安装苹果虚拟机

    一.前言--准备工作 在win10上安装Mac虚拟机,既是费劲又是费内存的活儿 1.安装Vmware 2.下载MacOS的镜像:自行百度下载 3. unlocker的下载地址:http://downl ...

  8. 微信小程序--flex常用的属性

    Flex布局 display:flex 指定当前盒子为伸缩盒 flex-direction:column 把盒子内容垂直从上往下排列 row 把盒子内容垂直从左往右排列 flex-wrap: wrap ...

  9. webpack学习之——npm的安装依赖情况

    这几天一直在研究webpack模块话打包工具,在网上的资源还是蛮丰富的,现在总结下这块的内容,需要好好的研究下,如果有问题,还请指正. 先是第一个为问题,就是npm-install --save 和n ...

  10. margin负值5种应用

    最近做的项目中经常会用到margin的负值,这里就总结一下关于margin负值的5种使用及相关bug的解决. 1. 在流动性布局中的应用 如WordPress的两栏式不固定布局就是使用margin负值 ...