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 对于一个基于二元运 ...
随机推荐
- poweroj1745: 餐巾计划问题
传送门 最小费用最大流. 每天拆成两个点,i表示用完的餐巾,i+n表示干净的餐巾. s向i连容量为ri费用为0的边,表示每天用脏的ri条餐巾. i+n向t连容量为ri费用为0的边,表示每天需要用ri条 ...
- H5C3--媒体查询(向上兼容,向下覆盖),link中引入的ont and only
一.使用 实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 彻底删除 Git 项目中的文件(BFG Repo-Cleaner 用法)
一些时候由于开发初期经验不足和贪图方便, 会把一些不应该提交到 Git 的文件上传到 Github, 带来一系列安全问题, 更有可能是把一些大文件上传到 GitHub 上, 导致项目非常臃肿, 每次 ...
- java并发系列(一)-----多线程简介、创建以及生命周期
进程.线程与任务 进程:程序的运行实例.打开电脑的任务管理器,如下: 正在运行的360浏览器就是一个进程.运行一个java程序的实质是启动一个java虚拟机进程,也就是说一个运行的java程序就是一个 ...
- vagrant简介
什么是vagrant? 简单理解,就是可以通过Vagrant这个工具管理虚拟机,比如说想创建一个centos环境的虚拟机,不需要安装系统这么麻烦,通过vagrant可以快速创建 官网地址:https: ...
- Zookeeper 扫盲
Zookeeper 扫盲 :disappointed_relieved: 配置文件详解: tickTime:基本事件单元,以毫秒为单位,这个时间作为 Zookeeper 服务器之间或客户端之间维持心跳 ...
- eclipse2018整合tomcat9
eclipse2018整合tomcat9 选择 Windows --> preferences --> server --> runtime environmen:点击“add”按钮 ...
- Nginx 编译设置模块执行顺序
Nginx编译时,配置"--add-module=xxx"可以加入模块,当我们需要按照指定顺序来设置过滤模块执行顺序时,先配置的"--add-module=xxx&quo ...
- Codeforces 849D.Rooter's Song
D. Rooter's Song time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Leetcode671.Second Minimum Node In a Binary Tree二叉树中的第二小结点
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的一个二叉树,你需要输出所有节点中 ...