链式队列定义及相关操作的实现
1. 数据元素的表示
typedef struct LinkNode {// 链式队列结点
int data;// 数据域
struct LinkNode* next;// 指针域
}LinkNode;
typedef struct {// 链式队列
LinkNode* front;// 队头指针
LinkNode* rear;// 队尾指针
}LinkQueue;
2. 初始化队列
/* 初始化队列 */
bool InitQueue(LinkQueue& Q) {
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));// 创建头结点
if (!s) {// 创建头结失败,返回false
return false;
}
Q.front = Q.rear = s;// 队列的头尾指针初始指向头结点
Q.rear->next = NULL;// 初始头结点的指针域为空
return true;
}
3. 判断队空
/* 判队列空 */
bool QueueEmpty(LinkQueue Q) {
return Q.front == Q.rear;// 队列的头尾指针同时指向头结点,队列为空
}
4. 进队操作
/* 进队操作(尾插法) */
bool EnQueue(LinkQueue& Q, int x) {
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
if (!s) {// 创建新结点失败,返回false
return false;
}
s->data = x;
s->next = Q.rear->next;
Q.rear->next = s;
Q.rear = s;
return true;
}
5. 出队操作
/* 出队操作(头结后删除) */
bool DeQueue(LinkQueue& Q, int &e) {
if (QueueEmpty(Q)) {// 空队列,出队失败,返回false
return false;
}
LinkNode* p = Q.front->next;// p指针指向第一个队列结点(除头结点外)
e = p->data;
Q.front->next = p->next;
if (p == Q.rear) {// 特殊情况:队列中只有一个元素时出队
Q.rear = Q.front;
}
free(p);// 释放该结点的内存空间
return true;
}
6. 读取队首元素
/* 读取队首元素 */
bool GetFront(LinkQueue Q,int &e) {
if (QueueEmpty(Q)) {// 空队列,返回false
return false;
}
e = Q.front->next->data;
return true;
}
7. 打印队列元素
/* 打印队列元素 */
void PrintQueue(LinkQueue Q) {
printf("链式队列(由队首到队尾):");
if (QueueEmpty(Q)) {// 空队列
printf("null\n");
return;
}
LinkNode* p = Q.front->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
8. 验证代码
int main()
{
LinkQueue q;
InitQueue(q);// 初始化队列
PrintQueue(q);
// 进队
for (int i = 1; i <= MaxSize; i++) {
EnQueue(q, i);
}
PrintQueue(q);
// 读取队首元素(队列非空)
int e = 0;
if (GetFront(q, e)) {
printf("读取队首元素成功,队首元素:%d\n", e);
}
// 出队(队列非空)
printf("依次出队:");
while (DeQueue(q, e)) {
printf("%d ", e);
}
printf("\n");
PrintQueue(q);
// 出队(空队列)
if (!DeQueue(q, e)) {
printf("出队失败,空队列\n");
}
// 读取队首元素(空队列)
if (!GetFront(q, e)) {
printf("读取队首元素失败,空队列\n");
}
return 0;
}
原文地址:https://blog.csdn.net/qq_62107003/article/details/137682904
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!