实验名称实验日期1、实验目的:
队列的基本操作与应用实验成绩
1、掌握链式存储队列的进队和出队等基本操作2、了解队列的应用
2、实验内容:
1、编写一个程序,实现链队的各种基本运算(假设队列中元素类型为char),并在此基础上设计一个程序完成如下功能:
(1)初始化链队q;(2)判断链队q是否非空;(3)依次进队元素abc;(4)出队一个元素,输出该元素;(5)依次进链队元素def(6)输出出队序列;(7)释放链队。2、编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:(1)病人到达诊室,将病历本交给护士,排到等待队列中侯诊。(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下1排队输入排队病人的病历号,加入到病人排队队列中。2就诊病人排队队列中最前面的病人就诊,并将其从队列中删除。3查看排队从队首到队尾列出所有的排队病人的病历号。4不再排队,余下依次就诊从队首到队尾列出所有的排队病人的病历号,并退出运行。
f3、核心算法或代码片段:
核心算法描述:
链队列存储结构:
typedefstructq
ode
i
tdata
structq
ode
ext
QNode
链队节点类型
typedefstruct
QNodefro
trear
QuType创建空队列:
链队类型
StatusI
itQueueLi
kQueueQ
构造一个空队列Q,队头指针和队尾指针都指向头结点)
Qfro
tQrearQueuePtrmallocsizeofQNode
ifQfro
texitOVERFLOW存储分配失败
Qfro
t
extNULL
retur
OK
f入队:
StatusE
QueueLi
kQueueQQElemTypee
插入元素e为Q的新队尾元素pQueuePtrmallocsizeofQNode
生成新结点
ifpexitOVERFLOW
存储分配失败
pdataep
extNULL插入队尾
Qrear
extp
Qrearp
修改队尾指针指向队尾
retur
OK
出队:
StatusDeQueueLi
kQueueQQElemTypee
若队列不空,则删除Q的队头元素,用e返回其值ifQfro
tQrearretur
ERROR判空
pQfro
t
extepdata
用e返回队头元素值
Qfro
t
extp
ext修改头指针始终指向队首元素
ifQrearpQrearQfro
t特殊情况处理空队
freep
释放队首结点
retur
OK
代码一:
i
cludestdiohi
cludemallochtypedefcharElemTypetypedefstructq
ode
ElemTypedatastructq
ode
extQNodetypedefstructQNodefro
tQNoderearLiQueuevoidI
itQueueLiQueueqvoidDestroyQueueLiQueueqboolQueueEmptyLiQueueqvoide
QueueLiQueueqElemTypeebooldeQueueLiQuer