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 对于一个基于二元运 ...
随机推荐
- TZ_10_常用的2中加密算法MD5,spring-sucrity
1.MD5 在注册时需要进行加密,在登陆时也需要加密进行配对 public class MD5util { public static String stringToMD5(String psd) { ...
- JS---案例:tab切换效果
案例:tab切换效果 获取所有的li标签 第一件事:把这个a所在的所以兄弟元素的类样式全部移除 (removeAttributes) 第二件事:当前点击的a父级元素li (点击这个a所在的所在元素li ...
- 直接在安装了redis的Linux机器上操作redis数据存储类型--String类型
一.概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型 ...
- canvas旋转图片
canvas旋转图片 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- SPFA(Bellman-Ford队列优化)
原理:队列+松弛操作 将源点加入队尾,每一步读取队头顶点u,并将队头顶点u出队(记得消除标记):将与点u相连的所有点v进行松弛操作,如果能更新距离(即令d[v]变小),那么就更新,另外,如果点v没有在 ...
- 【 USACO11JAN】 利润 【洛谷P3009】
P3009 [USACO11JAN]利润Profits 题目描述 The cows have opened a new business, and Farmer John wants to see h ...
- Data Lake Analytics账号和权限体系详细介绍
一.Data Lake Analytics介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析 ...
- sklearn之特征提取(文本特征)
1.引言 关于文本的提取有很多方法,本文主要探索下sklearn官方的文本特征提取功能. 2.文本特征提取 文本分析是机器学习算法的主要应用领域. 然而,原始数据,符号文字序列不能直接传递给算法,因为 ...
- 【水滴石穿】RNNewsGo
项目地址为:https://github.com/ImVeryGood/RNNewsGo 我们先来看一下页面 分析了一下项目,项目也是有用到redux-saga的 然后模块比较清晰 接下来我们分析代码 ...
- re模块相关
一.正则表达式中的转义: "\" 表示转义符 [()+*?/$.] 在字符组中一些特殊的字符会现出原形 所有的\w \d \s (\n,\t) \W \D \S 都表示它原本的意义 ...