-
(‘A’,1,5),(‘A’,2,15),(‘D’,1,5),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出(end)。
五、系统功能模块图和程序流程图 停车场管 理系统 车位综合管停车处理 理子系统 子系统 核对批准车查询查询查询 车辆辆进入收费空闲停车 信息 停车场 记录 车位 信息 图5.1 系统功能模块图
收费系统 固定车位收费处理 便道车位收费 开始 初始化两个栈Stack和Stack2及一个队列Queue 进入主菜单 车到达 车离开 列表显示 退出 总结 车场是否为空 车场内信息 便道信息 -
图5.2 程序流程图
六、概要设计
(1)设定栈的抽象数据类型定义为: ADT stack{
数据对象:D={ai|ai∈charset,i=1,2,…,n,n>=0} 数据关系:R1={
操作结果:构造一个空栈S。 DestroyStack(&S)
初始条件:栈S已经存在。 操作结果:销毁栈S。 ClearStack(&S)
初始条件:栈S已经存在。 操作结果:将S清空为空栈。 StackLength(&S)
初始条件:栈S已经存在。 操作结果:返回栈S的长度。 StackEmpty(&S)
初始条件:栈S已经存在。
操作结果:若S为空栈,则返回TURE,否则返回FALSE。GetTop(S,&e)
总结
-
初始条件:栈S已经存在。
操作结果:若栈S不空,则以e返回栈顶元素。 Push(&S,e)
初始条件:栈S已经存在。
操作结果:在栈S的栈顶插入新的栈顶元素e。 Pop(&S,&e)
初始条件:栈S已经存在。
操作结果:删除S的栈顶元素,并以e返回其值。 StackTraverse(S,visit()) 初始条件:栈S已经存在。
操作结果:从栈底到栈顶一次对S中的每个元素调用函数visit()。}ADT stack
(2)设定链式队列的抽象数据类型为: typedef struct Qnode{
QelemType data; Struct Qnode *next; }Qnode,*QueuePtr;
typedef struct{ QueuePtr front; QueuePtr teat; }
ADT Queue{
数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n>=0} 数据关系:R1={
InitQueue(&Q)
操作结果:构造一个空队列Q。 DestroyQueue(&Q)
初始条件:队列Q已经存在。
操作结果:队列Q被销毁,不再存在。 ClearQueue(&Q)
初始条件:队列Q已经存在。 操作结果:将Q清空为空队列。 QueueLength(Q)
初始条件:队列Q已经存在。
操作结果:返回Q的元素个数,即队列的长度。
总结
-
QueueEmpty(Q)
初始条件:队列Q已经存在。
操作结果:若Q为空队列,则返回TURE,否则返回FALSE。 GetHead(Q,&e)
初始条件:Q为非空队列。
操作结果:用e返回Q队列头元素。 EnQueue(&Q,e)
初始条件:队列Q已经存在。
操作结果:插入元素e为Q的新队尾元素。 DeQueue(&Q,&e)
初始条件:Q为非空队列。
操作结果:删除Q的队头元素,并以e返回其值。 QueueTraverse(Q,visit()) 初始条件:队列Q已经存在。
操作结果:从队头到队尾,依次对Q的每一个数据元素调用函数visit()。一旦visit()失败,则操作失败。 }ADT Queue
(3)本程序有4个模块 ①主程序模块 main(){
初始化
while(命令==“1”) 接受命令;/*绘表*/ do{命令;}
while(重复条件) if(条件){
If(条件)
接受命令; 处理命令;
for(初始值;循环条件;自加运算){} for(初始值;循环条件;自加运算){} else if{
接受命令; 处理命令; } }
if (条件){
接受命令; 处理命令; do{命令;}
while(循环条件){
接受命令; 处理命令;
总结
-
}
} else{
接受命令; 处理命令; }
}
②2个栈模块——实现栈抽象数据类型。 ③队列模块——实现队列抽象数据类型。
④各模块之间的调用关系:主程序模块、栈模块以及队列模块之间的关系。
总结