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

简介: 本组项目针对《数据结构基础系列(3):栈和队列》中的7-12课:7.队列的定义 8. 顺序队的存储及基本操作 9. 环形队列的存储及基本操作 10. 队列的链式存储结构及其基本运算的实现 11. 队列的应用-迷宫问题 12. 双端队列 【项目1 - 建立顺序环形队列算法库】   定义顺序环形队列存储结构,实现其基本运算,并完成测试。 要求:  

本组项目针对《数据结构基础系列(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小时)。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或修车场上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在候车场上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。

[参考解答]

目录
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
175 9
|
2月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
88 4
|
22天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
20 0
|
2月前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
2月前
|
存储
探索数据结构:单链表的实践和应用
探索数据结构:单链表的实践和应用
|
2月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
20 0
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
32 1
|
1月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。