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 对于一个基于二元运 ...
随机推荐
- OpenLayers使用symbolizers样式特征
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- vue项目及插件
vue项目的创建 方法1: cmd中执行 vue ui vue会创建一个socket,方便快捷 方法2: 命令行建立 vue create v-proj //创建项目名为v-proj的项目文件 > ...
- 实用Jupyter Notebook扩展工具——提升你的工作效率
Jupyter Notebook 现已成为数据分析,机器学习的必备工具.因为它可以让数据分析师集中精力向用户解释整个分析过程.通过安装一些扩展工具,可以让你在Jupyter Notebook上的工作效 ...
- java-多线程的入门_进阶总结
多线程 概述图 1.概述 进程:正在执行中的程序,其实时应用程序在内存中运行的那片空间. 线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程. (进程可以理解为是一个QQ程 ...
- Leetcode501.Find Mode in Binary Search Tree二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当 ...
- Javascript-商品管理新增/删除/修改功能
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- PAI-STUDIO通过Tensorflow处理MaxCompute表数据
PAI-STUDIO在支持OSS数据源的基础上,增加了对MaxCompute表的数据支持.用户可以直接使用PAI-STUDIO的Tensorflow组件读写MaxCompute数据,本教程将提供完整数 ...
- Spring_事务
事务管理: 用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当做一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性 原子性 一致性 隔离性 持久性 Spring两 ...
- arcgis显示经纬度
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- WPF e.Systemkey的一个坑
当用代码去控制按键盘F10按钮的时候,切换TabControl的标签页,然后再按其余的键盘键,无法响应 原因就是这个systemkey,是因为F10为系统的按键,用e.key==key.f10是无效的 ...