栈与队列应用举例.doc

栈与队列应用举例.doc

ID:53240464

大小:53.00 KB

页数:7页

时间:2020-04-02

栈与队列应用举例.doc_第1页
栈与队列应用举例.doc_第2页
栈与队列应用举例.doc_第3页
栈与队列应用举例.doc_第4页
栈与队列应用举例.doc_第5页
资源描述:

《栈与队列应用举例.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序从停车场最里面向门口处停放最先到达的第一辆车停在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就可进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车辆都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进入。每辆车在离开停车场时,根据它在停车场内停留时间的长短交费。如果停在便道上的车辆未进停车场就要离去,允许其离去时不收停车费,并

2、且仍然保持在便道上等待的车辆的次序。现在编制一个程序来模拟停车场的管理。首先确定模拟程序中需要的数据结构及其操作。由于停车场只有一个大门,因此可用一个栈来模拟;根据便道停车的特点,先排队的车辆先离开便道进入停车场,可以用一个队列来模拟;又因为排在停车场中间的车辆可以提前离开,因此还需要有一个地方(车辆规避所)保存为了让路离开停车场的车辆,很显然这也应该用一个栈来模拟。所以在程序中设置了两个顺序栈s1和s2分别表示停车场和规避所;设置了一个链队列q表示便道。它们的数据类型定义在下面的源程序中,为了操作方便,链队列表头结点中的num域中存

3、放便道上的车辆数量。程序执行时,当输入数据表示有车辆到达时,判断栈s1是否满,若未满就将新数据进栈s1;若栈已满,就将数据入队列q,表示车辆在便道上等待进入停车场。该操作过程由函数Arrive完成。当输入数据表示有车辆要离去时,就在栈s1中寻找此车牌号的车辆,如寻找到就让其离开停车场,并根据停车时间计费,同时将队列q的队头元素进栈s1;如没有找到,就到队列q中去寻找此车牌号的车辆。如在队列q中找到就允许其离开队列,并不收费;如找不到就显示出错信息。当离开停车场的车辆位于栈s1的中间时,必须先将此位置到栈顶之间的所有数据倒到栈s2中去,

4、然后安排车辆出栈s1,最后将栈s2中的数据倒回到栈s1中来。该操作过程由函数Delive完成。显然,以上两个主要操作需要利用栈和队列的两个基本操作入栈(队列)和出栈(队列)来实现。源程序中的函数Display则可以随时显示停车场的状况。#include "stdio.h"#define N 10 /*停车场容量*/#define M 5 /*停车单价*/#define True 1#define False 0typedef struct{ intnum; /*车牌号*/int arrtime; /*到达/离开时间*/}ELEMTP;

5、 /*顺序栈的数据元素类型*/typedef struct{ELEMTP elem[N];int top;}SqStack; /*顺序栈类型*/typedef struct node{int num; /*车牌号/便道上的车辆数量*/struct node *next;}QNode; /*链队列的数据元素类型*/typedef struct{QNode *front, *rear;}LQueue; /*链队列类型*/void InitStack_Sq (SqStack *s); /*初始化栈*/int Push_Sq(SqStack 

6、*s,ELEMTPx); /*入栈*/ELEMTP Pop_Sq(SqStack *s); /*出栈*/void InitQueue_L(LQueue*q);/*初始化队列*/void EnQueue_L (L LQueue *q,int num1); /*入队列*/int DelQueue_L(LQueue *q); /*出队列*/Void InitStack_Sq (SqStack*s){s->top=0;}Int Push_Sq(SqStack*s,ELEMTPx){ if (s->top==N)return (False);e

7、lse{s->elem[s->top]=x;s->top++;return(True);}}ELEMTP Pop_Sq(SqStack*s){ ELEMTP x;if (s->top==0){ x.num=NULL;x.arrtime=NULL;return(x);}else{ s->top--;return (s->elem[s->top]);}}void InitQueue_L(LQueue*q){ q->front=(QNode*)malloc(sizeof(QNode));q->rear=q->front;q->front->

8、next=NULL;q->front->num=0;}void EnQueue_L (Lqueue *q,int num1){ QNode *p;p=(QNode *)malloc(sizeof(QNode));p->n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。