数据结构(线性结构习题)Problem C: 下车的顺序
2016-12-25 23:36
295 查看
Problem C: 下车的顺序
Time Limit: 1 Sec Memory Limit:2 MB
Submit: 3642 Solved: 1353
[Submit][Status][Web
Board]
Description
很多高校都有两个或多个校区,为了方便教师和学生往返于这两个校区,学校在两个校区之间开通了校车。用于通勤的校车只有一个门,上、下车均需要通过此门,且校车的容量上限为c。车内过道很窄,只能容纳一个人通过,为了运送更多的人,车内中间过道上设有活动、可折叠的坐椅,如果有人站在或者坐在中间过道上,任何人都无法通过,是所谓一夫当关万夫莫开。在非常拥挤的情况下,司机通常让先上的人尽量坐在后排位置,这样从后往前一排排坐过来,最先上的人坐最后面,最后上的在最前面。当车到达目的地后,下车时,只能是靠近车门的人先下,这样一排排往后,最后一排的人最后下车。请编程模拟乘坐通勤车的情景:先上的人最后下来。每个乘客用一个编号来表示,用户给出一组乘客上车的编号(即乘客的等车次序),程序输出下车编号顺序。Input
输入第一行为测试数据组数。每组测试数据第1行输入两个整数n(1<=n<=100)、c(1<=c<=20000)分别代表停车的次数和校车容量,接下来有n行,每一行第一个数m表示有人上车还是下车(0 <= m <= 200):(1)当m=0时,后面紧跟着输入一个非负整数k,表示此时有k个人下车;(2)当m>0时,后面输入m个正整数,表示等待上车的人的编号,可能有人因车满而无法上车。Output
对每组测试数据,第1行输出数据组数,然后对每一个m为0输出一行k个数的编号(即每次输出都有谁下车了),每两个数中间用空格隔开。Sample Input
1 4 10 6 1 2 3 4 5 6 0 3 2 7 8 0 3
Sample Output
Case #1: 6 5 4 8 7 3
HINT
考察知识点:栈, 时间复杂度O(n),空间复杂度O(n)Append Code
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define NULL 0 #define OVERFLOW -1 #define ERROR 0 #define OK 1 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; //typedef char SElemType; typedef int SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack,*SStack; Status InitStack(SqStack &S,int c){ S.base=(SElemType*)malloc(c*sizeof(SElemType)); if(!S.base) exit(OVERFLOW);//储存分配失败 S.top = S.base; S.stacksize = c; return OK; }//复杂度:O(1) //入栈 Status Push(SqStack &S,SElemType e){ if(S.top-S.base==S.stacksize){//栈满了,应当重新分配空间 S.base=(SElemType*) realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top =(S.base+S.stacksize);//重新使得S.top指向栈顶,因为realloc S.stacksize+=STACKINCREMENT; } *S.top++=e;//top指向带插入的位置 return OK; } Status Pop(SqStack &S,SElemType &e){ //若栈不空则栈顶元素出栈并用e带回其值 if(S.top==S.base) return ERROR; e = *(S.top-1); S.top--; return OK; } //判断栈是否为空栈 Status StackEmpty(SqStack &S){ if(S.top=S.base) return 1; else return 0; } Status DestroyStack(SqStack &S){ //销毁栈S free(S.base); S.base=NULL; S.top=NULL; S.stacksize=0; return OK; } int main() { int t; scanf("%d",&t); int num = 0; while(t--){ printf("Case #%d:",++num); printf("\n"); int n,c,m; scanf("%d",&n); scanf("%d",&c); SqStack S; InitStack(S,c); SElemType e; while(n--){ scanf("%d",&m); if(m==0){ int aa; int first=0; scanf("%d",&aa); while(aa--){ Pop(S,e); if(first==0){ printf("%d",e); first++; } else{ printf(" %d",e); } } printf("\n"); } else{ for(int i =0;i<m;i++){ scanf("%d",&e); Push(S,e); } } } DestroyStack(S); } return 0; }
相关文章推荐
- 数据结构(线性结构习题)Problem B: 击鼓传花
- 数据结构(线性结构习题)Problem A: 求集合的交并补集
- 数据结构 | 如何实现线性表的顺序结构
- 数据结构 | 如何实现线性表的顺序结构
- 数据结构 学习笔记(二):线性结构:线性表(顺序表,链表,广义表,多重链表)
- 数据结构之线性表之顺序表和链表(通过数据结构角度深入理解arrayList和linkedList的特性)
- 【算法和数据结构】_17_小算法_线性结构:顺序表
- 数据结构之线性结构(顺序表和链表的比较)【五】
- 数据结构(线性结构习题)Problem A: 求集合的交并补集
- 数据结构 线性表的顺序结构
- 数据结构之线性结构---栈 顺序储存
- 数据结构中线性表的顺序储存结构
- 进击的数据结构一之线性表的顺序结构
- 数据结构-线性表的顺序结构
- 数据结构—Problem C: 调整表中元素顺序(线性表)
- 数据结构之线性结构---队列 顺序储存
- 【ShancoLove】带你看数据结构——第二课:线性表顺序结构
- 数据结构之线性表--顺序结构测试
- 【数据结构郝斌】3、模块一:线性结构