编写程序实现链队列的各种基本运算:初始化、销毁、清空、判断是否为空队列、求队列的长度、取队列的头元素、入队、出队。在此基础上设计一个主程序完成如下功能:(1)初始化链队列q;(2)判断链队列q是否为空;(3)依次入队元素a,b,c;(4)出队一个元素,并输出该元素;(5)输出链队列q的长度;(6)依次入队元素d,e,f;(7)输出链队列q的长度;(8)出队所有元素,并输出出队序列;(9)销毁链队列q
时间: 2023-06-24 22:03:25 浏览: 139
链队列是一种链式存储结构,可以通过指针来实现队列的各种基本运算。下面是链队列的各种基本运算的实现代码:
```C++
#include <iostream>
using namespace std;
// 链队列结点定义
struct Node {
int data;
Node *next;
};
// 链队列定义
struct Queue {
Node *front; // 队头指针
Node *rear; // 队尾指针
int length; // 队列长度
};
// 初始化链队列
void InitQueue(Queue &q) {
q.front = q.rear = new Node;
q.front->next = NULL;
q.length = 0;
}
// 销毁链队列
void DestroyQueue(Queue &q) {
Node *p = q.front;
while (p != NULL) {
Node *tmp = p->next;
delete p;
p = tmp;
}
q.front = q.rear = NULL;
q.length = 0;
}
// 清空链队列
void ClearQueue(Queue &q) {
Node *p = q.front->next;
while (p != NULL) {
Node *tmp = p->next;
delete p;
p = tmp;
}
q.front->next = NULL;
q.rear = q.front;
q.length = 0;
}
// 判断链队列是否为空
bool IsEmpty(Queue q) {
return q.front == q.rear;
}
// 求链队列长度
int Length(Queue q) {
return q.length;
}
// 取链队列头元素
bool GetHead(Queue q, int &x) {
if (IsEmpty(q)) {
return false;
}
x = q.front->next->data;
return true;
}
// 入链队列
void EnQueue(Queue &q, int x) {
Node *p = new Node;
p->data = x;
p->next = NULL;
q.rear->next = p;
q.rear = p;
q.length++;
}
// 出链队列
bool DeQueue(Queue &q, int &x) {
if (IsEmpty(q)) {
return false;
}
Node *p = q.front->next;
x = p->data;
q.front->next = p->next;
if (q.rear == p) {
q.rear = q.front;
}
delete p;
q.length--;
return true;
}
// 主程序
int main() {
Queue q; // 定义链队列q
int x; // 定义变量x
// 初始化链队列q
InitQueue(q);
// 判断链队列q是否为空
if (IsEmpty(q)) {
cout << "链队列q为空" << endl;
} else {
cout << "链队列q不为空" << endl;
}
// 依次入队元素a,b,c
EnQueue(q, 'a');
EnQueue(q, 'b');
EnQueue(q, 'c');
// 出队一个元素,并输出该元素
DeQueue(q, x);
cout << "出队元素为:" << (char)x << endl;
// 输出链队列q的长度
cout << "链队列q的长度为:" << Length(q) << endl;
// 依次入队元素d,e,f
EnQueue(q, 'd');
EnQueue(q, 'e');
EnQueue(q, 'f');
// 输出链队列q的长度
cout << "链队列q的长度为:" << Length(q) << endl;
// 出队所有元素,并输出出队序列
cout << "出队序列为:";
while (!IsEmpty(q)) {
DeQueue(q, x);
cout << (char)x << " ";
}
cout << endl;
// 销毁链队列q
DestroyQueue(q);
return 0;
}
```
这个程序实现了链队列的各种基本运算,并且设计了一个主程序,通过输入一些元素,对链队列进行操作,并输出一些相关信息,包括链队列是否为空、链队列的长度、出队序列等。
阅读全文