logo资料库

实验二,数据结构,停车场管理.doc

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
华北水利水电学院 数据结构 实验报告 2012~2013 学年 第 一 学期 2010 级 计算机科学与技术 专业 班级: 137 班 学号: 2010137 姓名: 实验二 栈和队列及其应用 一、 实验题目: 栈和队列及其应用——停车场管理 二、 实验内容: 设停车场是一个可停放 n 辆车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到 达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北段),若 停车厂内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一 辆车迹可开入;停车场内某辆车要离开时,在它之后进入的车连必须先退出车厂为它让路,待该车辆开出 大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车时必须按它停留的时间长短缴 纳费用。编写按上述要求进行管理的模拟程序。 可以将停车场定义成一个顺序栈 s0,便道定义成一个链队列 q,而停车场中的某辆车要离开,则在它后 面进停车场的车必须让道,让其离开,所以必须有一个临时的顺序栈 s1,存放让道的车辆。 当有车辆进停车场时,若栈 s0 不满,则直接进入栈 s0;若栈 s0 满,则进入便道(链队列 q)。若有 s0 中车辆 x 离开时,先让在 x 后面进栈的车从 s0 退栈并进入栈 s1 中,让 x 离开并收取停车费(在便道上 停留的时间不收费),然后再把 s1 中所有元素退栈并重新进入 s0 栈,最后,将链队列 q 中的队头元素出队 并进栈到 s0 中。 三、 程序源代码: #include #include #include #include #define MAX 5 /*车库容量, */ #define price 0.01 /*一辆车每分钟费用*/ typedef struct time { int hour; int min; }Time; /*时间结点*/ typedef struct node { 第 1 页 共 16 页
char num[10]; Time reach; Time leave; }CarNode; /*车辆信息结点*/ typedef struct NODE { CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟停车场*/ typedef struct car { CarNode *data; struct car *next; }QueueNode; typedef struct Node { QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ /*方法声明*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示信息*/ void PRINT(CarNode *p,int room); /*输出离开车辆的信息清单*/ void main() { 第 2 页 共 16 页
SeqStackCar S0,S1; LinkQueueCar Q; int ch; InitStack(&S0); /*初始化车站*/ InitStack(&S1); /*初始化让路的临时栈*/ InitQueue(&Q); /*初始化通道*/ while(1) { cout<<" ※※※※ @欢迎使用本停车管理系统 @ ※※※※ "<>ch; if(ch>=1&&ch<=4)break; else cout<<"输入错误!请选择:(1-4)."<
case 1:Arrival(&S0,&Q);break; /*车辆到达*/ case 2:Leave(&S0,&S1,&Q);break; /*车辆离开*/ case 3:List(S0,Q);break; /*列表显示信息*/ case 4:exit(0); /*退出主程序*/ default: break; } } } void InitStack(SeqStackCar *s) /*初始化栈*/ { } int i; s->top=0; for(i=0;i<=MAX;i++) s->stack[s->top]=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ { } Q->head=(QueueNode *)malloc(sizeof(QueueNode)); if(Q->head!=NULL) { } Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); int Arrival(SeqStackCar *S0,LinkQueueCar *W) /*车辆到达*/ { CarNode *p; 第 4 页 共 16 页
QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode)); flushall(); cout<<"请输入车牌号(例:A1234):"<num); if(S0->toptop++; cout<<"车辆在车场第"<top <<"位置!"<>p->reach.hour; while(p->reach.hour<0||p->reach.hour>23) //控制时间格式正确 { } cout<<"输入错误!"<>p->reach.hour; cin>>p->reach.min; while(p->reach.min<0||p->reach.min>59) //控制分钟输入正确 { } cout<<"输入错误!"<>p->reach.min; S0->stack[S0->top]=p; return(1); } else /*车场已满,车进便道*/ { cout<<"车场已满,请在便道等待!"<
t=(QueueNode *)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); } } void Leave(SeqStackCar *S0,SeqStackCar *S1,LinkQueueCar *W) /*车辆离开*/ { int room; CarNode *p; QueueNode *q; /*判断车场内是否有车*/ if(S0->top>0) /*有车*/ { while(1) /*输入离开车辆的信息*/ { } { } cout<<"请输入车在车场的位置 1--"<top<<":"; cin>>room; if(room>=1&&room<=S0->top) break; while(S0->top>room) /*车辆离开*/ S1->top++; /*临时通道栈顶指针*/ S1->stack[S1->top]=S0->stack[S0->top]; S0->stack[S0->top]=NULL; S0->top--; p=S0->stack[S0->top]; 第 6 页 共 16 页
S0->stack[S0->top]=NULL; S0->top--; while(S1->top>=1) /*判断临时通道上是否有车*/ { S0->top++; S0->stack[S0->top]=S1->stack[S1->top]; S1->stack[S1->top]=NULL; S1->top--;} PRINT(p,room); if((W->head!=W->rear)&&S0->tophead->next; p=q->data; /*p 指向链队头*/ S0->top++; cout<<" 便 道 的 "<num<<" 号 车 进 入 车 场 第 "<top<<" 位 置!"<>p->reach.hour; if(p->reach.hour<0||p->reach.hour>23) cout<<"输入错误!"<>p->reach.hour; { } cin>>p->reach.min; if(p->reach.min<0||p->reach.min>59) { cout<<"输入错误!"<>p->reach.min; 第 7 页 共 16 页
} } S0->stack[S0->top]=p; W->head->next=q->next; if(q==W->rear) W->rear=W->head; free(q); /*释放 q 地址*/ else cout<<"便道里没有车!"<>p->leave.hour; while(p->leave.hour<0||p->leave.hour>23) { } cout<<"输入错误!"<>p->leave.hour; B1=p->leave.hour; cin>>p->leave.min; if(p->leave.min<0||p->leave.min>59) { cout<<"输入错误!"<
分享到:
收藏