SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一: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的停车场的更多相关文章
- 数据结构实验之栈与队列十一:refresh的停车场
数据结构实验之栈与队列十一:refresh的停车场 Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时 ...
- SDUT-2449_数据结构实验之栈与队列十:走迷宫
数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...
- SDUT-1479_数据结构实验之栈与队列九:行编辑器
数据结构实验之栈与队列九:行编辑器 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个简单的行编辑程序的功能是:接受用 ...
- SDUT-3335_数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...
- SDUT-3334_数据结构实验之栈与队列七:出栈序列判定
数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...
- SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值
数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...
- SDUT-2134_数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...
- SDUT-2133_数据结构实验之栈与队列三:后缀式求值
数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
随机推荐
- 20190828 [ Night ] - 弋
半集训可还行…… 半集训第一次模拟 考试过程 好像是上回的同套题. ××内个$\text{english}$真毒瘤 T1 什么玩意? $chinese$? 前面两句背景是个? 需要$\Theta(1) ...
- CesiumLab V1.4 新功能 BIM数据处理
我也没想到,BIM数据处理一下拖了这么久才有个交代.我们照例先放图 Revit官方的示例数据 隐藏屋顶+俯视 曾经因为太大而无法导出无法处理的医院模型 室内装修方案模型 最近和很多做b ...
- 开户项目的sql查询语句备查
查询全国所有的券商名录 SELECT id,security,province,city,borough FROM t_security GROUP BY security ; 查询某个省份的所有券商 ...
- Orleans 整体介绍
背景 Orleans 是微软开源的Actor模型开发框架. Actor模型 此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人 ...
- Linux下允许MySQL 授权远程连接
1.mysql -u root -p (root)用户名 2.mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'r ...
- GYM 101981E(开关反转性质)
要点 做法是删去连续的k个0或k个1,连消.消消乐的那种,网上博主用个栈\(O(n)\)就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以 ...
- Unity 同一Text文本修改不同的字体大小和字体颜色
类似Html,在color和size对应的<>str</>中,就能修改str的相关属性, 下面的代码就是把time改为字体颜色为红色,大小为40: 而前面的"Time ...
- LUGOU P3907 圈的异或
传送门 解题思路 其实就是找出所有的环判断,因为数据范围很小直接暴力做,注意要判断自环. 代码 #include<iostream> #include<cstdio> #inc ...
- bzoj1823满汉全席
2-sat模板 这篇博客写得非常好 传送门 //Achen #include<algorithm> #include<iostream> #include<cstring ...
- 杨柳絮-Info:太原市多部门通力合作科学治理杨柳飞絮效果好
ylbtech-杨柳絮-Info:太原市多部门通力合作科学治理杨柳飞絮效果好 1.返回顶部 1. 太原市多部门通力合作科学治理杨柳飞絮效果好 2016-04-21 07:16 4月10日,随着气温升高 ...