一、实验目的
掌握链队的存储结构和掌握链队中各种基本运算算法的设计。
掌握队列应用的算法设计。
二、实验环境(仪器设备、软件等)
5-208机房计算机
Visual Studio 2022
Win10系统
三、实验原理(或要求)
选择一道并完成编程。
【1】编写程序liqueue.cpp,实现链队(假设队列中元素类型ElemType为char),并在主程序中进行测试其功能。
- 初始化链队q。
- 判断链队q是否非空。
- 依次进队元素a、b、c。
- 出队一个元素,输出该元素。
- 依次进队元素d、e、f。
- 输出出队序列。
- 释放链队。
【2】编写病人看病模拟程序
编写一个程序seeingdoctor.cpp,反映病人到医院排队看病的情况。在病人排队过程中,主要重复下面两件事。
- 病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求:模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:
1.排队——输入排队病人的病历号,加入病人排队队列中。
2.就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。
3.查看排队——从队首到队尾列出所有排队病人的病历号。
4.不再排队,余下依次就诊——从队首到队尾列出所有排队病人的病历号,并退出运行。
5.下班——退出运行。
四、实验步骤
【1】编写程序liqueue.cpp,实现链队:
- 初始化链队q:
在程序中创建一个链队对象LiQueue q;
,即创建一个空的链队列。 - 判断链队q是否非空:
使用isEmpty()
方法来判断队列是否为空,并输出结果。 - 依次进队元素a、b、c:
使用enqueue()
方法依次将字符 ‘a’、‘b’、‘c’ 进队。 - 出队一个元素,输出该元素:
使用dequeue()
方法出队一个元素,并将其输出。 - 依次进队元素d、e、f:
使用enqueue()
方法依次将字符 ‘d’、‘e’、‘f’ 进队。 - 输出出队序列:
使用dequeue()
方法逐个出队并输出元素,直到队列为空。 - 释放链队:
使用destroyQueue()
方法释放链队的内存空间。
#include <iostream>
using namespace std;
// 定义节点结构体
struct Node {
char data; // 存储字符数据
Node* next; // 指向下一个节点
};
// 定义链队类
class LiQueue {
public:
Node* front; // 队头指针
Node* rear; // 队尾指针
// 构造函数,初始化队列
LiQueue() {
front = rear = new Node(); // 创建头节点
front->next = nullptr;
}
// 判断队列是否为空
bool isEmpty() {
return front == rear;
}
// 入队操作
void enqueue(char e) {
Node* newNode = new Node(); // 创建新节点
newNode->data = e;
newNode->next = nullptr;