数据结构实践项目——队列

本组项目针对《数据结构基础系列(3):线性表》中的7-12课:

7.队列的定义

8. 顺序队的存储及基本操作

9. 环形队列的存储及基本操作

10. 队列的链式存储结构及其基本运算的实现

11. 队列的应用-迷宫问题

12. 双端队列

【项目1 - 建立顺序环形队列算法库】

  定义顺序环形队列存储结构,实现其基本运算,并完成测试。

要求:

  1、头文件sqqueue.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:

void InitQueue(SqQueue *&q);  //初始化顺序环形队列
void DestroyQueue(SqQueue *&q); //销毁顺序环形队列
bool QueueEmpty(SqQueue *q);  //判断顺序环形队列是否为空
int QueueLength(SqQueue *q);   //返回队列中元素个数,也称队列长度
bool enQueue(SqQueue *&q,ElemType e);   //进队
bool deQueue(SqQueue *&q,ElemType &e);  //出队

  2、在sqqueue.cpp中实现这些函数

  3、在main函数中完成测试,包括如下内容:

(1)初始化队列q

(2)依次进队列元素a,b,c

(3)判断队列是否为空

(4)出队一个元素

(5)输出队列中元素个数

(6)依次进队列元素d,e,f

(7)输出队列中元素个数

(8)将队列中所有元素删除,并输出序列

(9)释放队列

[参考解答]

【项目2 - 建立链队算法库】

  定义链队存储结构,实现其基本运算,并完成测试。

  具体要求参照项目1。

[参考解答]

【项目3 - 负数把正数赶出队列】

  设从键盘输入一整数序列a1,a2,…an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,表示输入结束。要求将队列处理成环形队列,使用环形队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。当进队出队异常(如队满)时,要打印出错信息。

[参考解答]

【项目4 - 队列数组】

  创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。

  要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。

  设程序运行时输入:70 59 90 72 67 88 80 64 29 97 18 83 40 13 0

  输出结果如下图:

提示:

指向单个链队的指针如下定义:

LiQueue *qu;

本项目中使用的队列数组,实际上需要将十个链队的指针,顺序存储到一个数组中即可,如下定义:

LiQueue *qu[10]; //qu是数组,数组中存储指针,存储的是指向LiQueue类型的指针

[参考解答]

【项目5 -排队看病模拟】

编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:

(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。

(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。

要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:

(1)排队——输入排队病人的病历号,加入到病人排队队列中。

(2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。

(3)查看排队——从队首到队尾列出所有的排队病人的病历号。

(4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。

(5)下班——退出运行,提示未就诊的病人明天再来。

运行结果可以如下图所示:

  

[参考解答]

【项目6 - 停车场模拟】

  设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开。若车场内已停满n辆汽车,则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路(假定停车场内设有供车辆进出的便道,所有的司机也必须在车内随时待命),待该辆车开出外,其他车辆再按原次序进入车场。每辆停放在车场的车在它离开停车场时,要按停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

  

提示:

  以栈模拟停车场,以队列模拟车场外的候车场,有车离开时,供车辆进出的便道也应该用栈表示。按照从键盘读入的输入数据序列进行模拟管理。汽车到达和离开时,每一组输入数据包括汽车牌照号码(设为整数)以及到达或离去的时刻(为简单化,也设为整数,如1,代表停车场开始营业的第1小时)。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或修车场上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在候车场上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。

[参考解答]

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 06:03:00

数据结构实践项目——队列的相关文章

数据结构实践项目——外部排序

本文是针对[数据结构基础系列(10):外部排序]中的实践项目. [项目-1]置换-选择算法模拟 编敲代码,模拟置换-选择算法生成初始归并段的过程. 设大文件里的记录共同拥有18个: 15 4 97 64 17 32 108 44 76 9 39 82 56 31 80 73 255 68 内存工作区能够容纳5个记录.输出产生的归并段文件. 在模拟中.输入文件数据和输出的归并段数据均直接置在内存中就可以. [參考解答] [项目2]败者树归并模拟 编敲代码,模拟改者树实现5路归并算法的过程. 设有5

数据结构实践项目——最短路径和拓扑序列

本文是针对[数据结构基础系列(7):图]的第2组实践例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) 0710 生成树的概念 0711 最小生成树的普里姆算法 0712 最小生成树的克鲁斯卡尔算法 0713 从一个顶点到其余各顶点的最短路径 0714 每对顶点之间的最短路径 0715 拓扑排序 0716 AOE网与关键路径 纸上谈兵:"知原理"检验题目 1.针对下面的图1: (图1) (1)写出图的邻接矩阵: (2)按照Prim算

数据结构实践项目——栈

本组项目针对<数据结构基础系列(3):线性表>中的1-6课: 1 "栈和队列"导学 2 栈的定义 3 栈的顺序存储结构及其基本运算实现 4 栈的链式存储结构及其基本运算的实现 5 栈的应用1-表达式求值 6 栈的应用2-迷宫问题 [项目1 - 建立顺序栈算法库] 定义顺序栈存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitStack(SqStack *&

数据结构实践项目——顺序表

[项目1 - 顺序表的基本运算] 领会"0207将算法变程序"部分建议的方法,将顺序表部分的算法变成程序. 实现顺序表基本运算有算法(对应视频0204创建线性表的实现和0205顺序表基本运算的实现),依据"最小化"的原则进行测试.所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试. 作为第一个这种类型的实践(后续每一部分均有这种实践,这是我们学习的基础,也是实践成果积累的基础),结合相关的算法,给出建议的过程: (1)目的是要测试

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构实践项目——串

本文针对数据结构基础系列网络课程(4):串. 1. 串的基本概念及导学 2. 串的顺序存储及其基本操作实现 3. 串的顺序存储应用 4. 串的链式存储及其基本操作实现 5. 串的模式匹配(Brute-Force算法) 6. 串的模式匹配(KMP算法) [项目1 - 建立顺序串的算法库] 定义顺序串的存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqString.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void StrAssign(SqString &s

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 7 二叉树与树.森林之间的转换 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BT

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

数据结构实践项目——链表

本组项目针对<数据结构基础系列(2):线性表>课程第8-15节 8. 线性表的链式存储 9. 建立单链表 10. 单链表基本操作的实现 11. 单链表应用举例 12. 双链表 13. 循环链表 14. 线性表的应用 15. 有序表 [项目1 - 建立单链表] 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果. 请在下面代码的基础上开展工作: #include <stdio.h> #include <malloc.h> typedef int Ele