版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、停车场管理程序实验报告一 实验题目: 停车场管理程序二 实验要求: 编写一个程序实现停车场的管理功能。并且,以栈模拟停车场,以队列模拟车场外到达便道的过程,按照从终端读入的输入数据序列进行模拟管理。栈以顺序结构实现,队列顺序循环结构实现。用户输入的命令有以下5种:(1) 汽车到达;(2) 汽车离去输出停车场中的所有汽车牌号;(3) 输出候车场中的所有汽车牌号;(4) 退出系统运行。三 实验内容:3.1 栈的抽象数据类型:ADT Stack数据对象:D=ai|aiElemSet, i=1,2, ,n, n0数据关系:R1=<ai-1,ai>|ai-1,aiD, i=1,2, ,n 约
2、定an端为栈顶,a1端为栈底。基本操作: InitStack( &S ) 操作结果:构造一个空栈S。 DestroyStack ( &S ) 初始条件:栈S已存在。 操作结果:销毁栈S。 ClearStack( &S ) 初始条件:栈S已存在。 操作结果:将S清为空栈。 StackEmpty( S ) 初始条件:栈S已存在。 操作结果:若S为空栈,则返回TRUE,否则返回FALSE。 StackLength( S ) 初始条件:栈S已存在。 操作结果:返回S的数据元素个数,即栈的长度。 GetTop( S, &e ) 初始条件:栈S已存在且非空。 操作结果:用e
3、返回S的栈顶元素。 Push( &S, e ) 初始条件:栈S已存在。 操作结果:插入元素e为新的栈顶元素。 Pop( &S, &e ) 初始条件:栈S已存在且非空。 操作结果:删除S的栈顶元素,并用e返回其值。 StackTraverse( S, visit() ) 初始条件:栈S已存在且非空。 操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。ADT Stack3.2存储结构的定义;#define N 3#define M 4#define price 2typedef structint carnoN;int
4、cartimeN;int top;SqStack;typedef struct int carnoM; int front,rear;SqQueue;3.3基本操作实现:/* 创建栈 */void InitStack(SqStack *&s) s = (SqStack *)malloc(sizeof(SqStack); s->top = -1;/* 摧毁栈 */void DestroyStack(SqStack *&s)free(s);/* 查看栈是否为空 */bool StackEmpty(SqStack *s) return s->top=-1;/* 进栈 */
5、bool Push(SqStack *&s,int e1,int e2)if(s->top = N - 1)return false;s->top+;s->carnos->top = e1;s->cartimes->top = e2;/printf(">>停车场中位置:%dn",e1);return true;bool StackFull(SqStack *s)return s->top = N-1;/* 出栈 */bool Pop(SqStack *&s,int &e1,int &e2)
6、if(s->top = -1)return false;e1 = s->carnos->top;e2 = s->cartimes->top;s->top-;return true;void DispStack(SqStack *s)printf(">>停车场中的车辆为:");int i;for(i = s->top; i >= 0; -i)printf("%d ",s->carnoi);printf("n");/* 以下为队列 */* 初始化队列 */void Init
7、Queue(SqQueue *&q) q = (SqQueue *)malloc(sizeof(SqQueue); q->front=q->rear=0;/* 释放队列 */void DestroyQueue(SqQueue *&q) free(q);/* 查看队列是否为空 */bool QueueEmpty(SqQueue *q) return q->front = q->rear;bool QueueFull(SqQueue *q)return (q->rear + 1)% M = q->front;/* 进队 */bool enQueu
8、e(SqQueue *&q,int e) if(q->rear + 1) % M = q->front) return false; q->rear=(q->rear + 1)%M; q->carnoq->rear = e; return true;/* 出队 */bool deQueue(SqQueue *&q,int &e) if(q->front = q->rear) return false; q->front = (q->front + 1) % M; e = q->carnoq->fro
9、nt; return true;3.4解题思路:1. 通过栈模拟停车场2. 通过队列模拟候车场3. 然后全程模拟即可。3.5解题过程:实验源代码如下:#include <stdio.h>#include <malloc.h>#define N 3#define M 4#define price 2typedef struct int carnoN;int cartimeN;int top;SqStack;typedef struct int carnoM; int front,rear;SqQueue;/* 创建栈 */void InitStack(SqStack *&
10、amp;s) s = (SqStack *)malloc(sizeof(SqStack); s->top = -1;/* 摧毁栈 */void DestroyStack(SqStack *&s)free(s);/* 查看栈是否为空 */bool StackEmpty(SqStack *s) return s->top=-1;/* 进栈 */bool Push(SqStack *&s,int e1,int e2)if(s->top = N - 1)return false;s->top+;s->carnos->top = e1;s->ca
11、rtimes->top = e2;/printf(">>停车场中位置:%dn",e1);return true;bool StackFull(SqStack *s)return s->top = N-1;/* 出栈 */bool Pop(SqStack *&s,int &e1,int &e2)if(s->top = -1)return false;e1 = s->carnos->top;e2 = s->cartimes->top;s->top-;return true;void DispSt
12、ack(SqStack *s)printf(">>停车场中的车辆为:");int i;for(i = s->top; i >= 0; -i)printf("%d ",s->carnoi);printf("n");/* 以下为队列 */* 初始化队列 */void InitQueue(SqQueue *&q) q = (SqQueue *)malloc(sizeof(SqQueue); q->front=q->rear=0;/* 释放队列 */void DestroyQueue(SqQu
13、eue *&q) free(q);/* 查看队列是否为空 */bool QueueEmpty(SqQueue *q) return q->front = q->rear;bool QueueFull(SqQueue *q)return (q->rear + 1)% M = q->front;/* 进队 */bool enQueue(SqQueue *&q,int e) if(q->rear + 1) % M = q->front) return false; q->rear=(q->rear + 1)%M; q->carno
14、q->rear = e; return true;/* 出队 */bool deQueue(SqQueue *&q,int &e) if(q->front = q->rear) return false; q->front = (q->front + 1) % M; e = q->carnoq->front; return true;void DispQueue(SqQueue *q)printf(">>候车场中的车辆为:");int i ;i = (q->front + 1) % M;printf
15、("%d ",q->carnoi);while(q->rear - i + M) % M > 0)i = (i + 1) % M;printf("%d ",q->carnoi);printf("n");int main( )int comm;int no, e1, e2, time;int i, j;SqStack *st, *st1;SqQueue *qu;InitStack(st);InitStack(st1);InitQueue(qu);while(1)printf("输入指令(1:到达 2:离
16、开 3:停车场 4:候车场 0:退出):");scanf("%d",&comm);if(comm = 0)if(!StackEmpty(st)DispStack(st);elseprintf(">>停车场中无车辆 !n");if(!QueueEmpty(qu)DispQueue(qu);elseprintf(">>候车场中无车辆 !n");break;else if(comm = 1)printf("车号 到达时间 :");scanf("%d%d",&a
17、mp;no,&time);if(!StackFull(st)Push(st,no,time);printf(">>停车场中位置:%dn",st->top + 1);elseif(!QueueFull(qu)enQueue(qu,no);printf(">>候车场中位置:%dn",qu->rear);elseprintf(">>候车场位置已满!不能停车!n");else if(comm = 2)printf("车号 离开时间 :");scanf("%d
18、%d",&no,&time);for(i = 0;i <= st->top && st->carnoi != no; +i);if(i>st->top)printf(">>未找到该编号的汽车n");elsefor(j = st->top; j > i; -j)Pop(st,e1,e2);Push(st1,e1,e2);Pop(st,e1,e2);printf(">>%d 汽车停车费用:%dn",no,(time - e2) * price);while(!StackEmpty(st1)Pop(st1,e1,e2);Push(st,e1,e2);if(!QueueEmpty(qu)deQueue(qu,e1);Push(st,e1,time);else if(comm = 3)if(!St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论