栈和队列及其应用_停车场管理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以栈模拟停车场,以队列模拟便道,按照从终端读入的数据进行模拟管理。每一组数据包括三个数据项:汽车“到达”或“离开”的信息,汽车牌照号以及到达或离开的时间。对每一组输入数据进行操作后的输出信息为:若是车辆到达则输出汽车在停车场或在便道上的位置,若是车辆离开则输出汽车在停车场内停留的时间和需要缴纳的费用(便道不收费)。栈以顺序结构实现,队列以链表结构实现。
//--*-*-*-*-*-*-*-*-车辆信息定义*-*-*-*-*-*-*//
typedef struct{
char AD;
int car_ID;
int time;
}car_info;
//------------------------------------------------栈----------------------------------//
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{//构造一个空栈s
S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
Status QueueEmpty(LinkQueue &Q)
初始条件:队列存在
操作结果:队列空为真,否则为假
} ADT Queue
3.本程序包含四个模块:
1Void main()
{
初始化;
while(1)
{接受用户数据;
作出相应操作;}
}
2栈模块——实现栈抽象数据类型定义;
3队模块——实现队列抽象数据类型定义
{//插入元素e为新的wk.baidu.com顶元素
*S.top=e;
S.top++;
return ok;
}//Push
Status Pop(SqStack &S,SElemType &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值
if(S.top==S.base)
return Error;
S.top--;
e=*S.top;
else return False;
}//栈满吗
Status StackEmpty(SqStack S){
//栈空则返回TRUE,否则返回FALSE
if(S.top==S.base)return True;
else return False;
}//栈空吗
Status Push(SqStack &S,SElemType e)
//Status表示函数的返回状态
typedef int Status;
typedef car_info SElemType;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct{
初始条件:栈S已存在
操作结果:销毁栈S
ClearStack(&S)
初始条件:栈S已存在
操作结果:将S清为空栈
Push(&S,e)
初始条件:栈S已存在
操作结果:插入e到栈顶
Pop(&S,&e)
初始条件:栈S已存在且非空
操作结果:删除栈顶元素用e返回其值
Status StackFull(SqStack S)
实验2栈和队列及其应用
--------停车场管理
一.需求分析
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按到达时间的先后顺序,一次由北朝向南排列(大门在最南边最先到达的第一辆汽车停放在车场最北端),若停车场已满,则以后来的汽车只能停在便道上,一旦有车辆开走,则便道上的第一辆车便可开进车场;当车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为其让路,待该车辆开出大门后,其他车辆在按原来顺序开进车场,每辆停放在车场内的车辆按其待得时间长短缴纳费用(便道上不收费)。
4停车场有关操作
三.详细设计
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define True 1
#define False 0
#define ok 1
#define Error 0
#define Infeasible -1
#define Overflow -2
if(!S.base)
exit(Overflow);//存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return ok;
}//InitStack
Status StackFull(SqStack S){
//栈满则返回TRUE,否则返回FALSE
if(S.top-S.base>=S.stacksize) return True;
初始条件:栈已存在
操作结果:栈满则返回TRUE,否则返回FALSE
Status StackEmpty(SqStack S)
初始条件:栈已存在
操作结果:栈空则返回TRUE,否则返回FALSE
} ADT Stackr
2.设定队列的抽象数据类型定义:
ADT Queue{
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n>=0}
return ok;
}//Pop
//*-**-*-*-*-*队列*-*-*-*-*-*-*-//
typedef car_info QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
二.概要设计
1.设定栈的抽象数据类型定义:
ADT Stack {
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n>=0}
数据关系:R={<ai-1,ai>|ai-1,ai∈D},约定an为栈顶元素
基本操作:
InitStack (&S)
操作结果:构造一个空栈
DestroyStack(&S)
数据关系:R={<ai-1,ai>|ai-1,ai∈D,约定a1为队头,an为对尾部}
基本操作:
InitQueue (&Q)
操作结果:构造一个空队列
EnQueue(&Q,e)
初始条件:队列Q已存在
操作结果:插入e到队尾
DeQueue(&Q,&e)
初始条件:队列Q已存在且非空
操作结果:删除队头元素用e返回其值
相关文档
最新文档