这段代码实现了一个基于链表的队列(链队),包括队列的初始化、入队、出队和打印队列中的元素等功能。以下是代码的主要组成部分和功能:
1. 数据结构定义:
- LinkNode:定义了链表节点,包含数据域 data 和指向下一个节点的指针 next。
- LinkQueue:定义了链队,包含指向队首和队尾的指针 front 和 rear。
2. 函数功能:
- initQueue():初始化队列,创建一个头节点,并使 front 和 rear 都指向这个头节点。
- enqueue(LinkQueuePtr paraQueuePtr, int paraElement):入队操作,将新元素添加到队尾。
- dequeue(LinkQueuePtr paraQueuePtr):出队操作,移除并返回队首元素。如果队列为空,则返回 -1 并打印提示信息。
- outputLinkQueue(LinkQueuePtr paraQueuePtr):打印队列中的所有元素。
3. 测试函数 testLinkQueue():
- 通过调用初始化、入队、出队和打印函数来测试链队的功能。
4. 主函数 main():
- 调用 testLinkQueue() 来执行测试。
这段代码展示了如何使用结构体和指针在 C++ 中实现基本的队列操作。代码中使用了 malloc 来动态分配内存,使用 free 来释放内存,确保了内存管理的正确性。
#include<iostream>
using namespace std;
typedef struct LinkNode {
int data;
struct LinkNode* next;
}*LinkNodePtr;
//创建链队
typedef struct LinkQueue {
LinkNodePtr front;
LinkNodePtr rear;
}*LinkQueuePtr;
//初始化
LinkQueuePtr initQueue() {
LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue));
LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
headerPtr->next = NULL;
resultPtr->front = headerPtr;
resultPtr->rear = headerPtr;
return resultPtr;
}
//打印出队列中元素
void outputLinkQueue(LinkQueuePtr paraQueuePtr) {
LinkNodePtr tempPtr = paraQueuePtr->front->next;
while (tempPtr != NULL) {
printf("%d\n", tempPtr->data);
tempPtr = tempPtr->next;
}
}
//入队
void enqueue(LinkQueuePtr paraQueuePtr, int paraElement) {
LinkNodePtr tempNodePtr = (LinkNodePtr)malloc(sizeof(struct LinkNode));
tempNodePtr->data = paraElement;
tempNodePtr->next = NULL;
paraQueuePtr->rear->next = tempNodePtr;
paraQueuePtr->rear = paraQueuePtr->rear->next;
return;
}
//出队
int dequeue(LinkQueuePtr paraQueuePtr) {
int resultValue;
LinkNodePtr tempNodePtr;
if (paraQueuePtr->front == paraQueuePtr->rear) {
cout << "The queue is empty.\r\n" << endl;
return -1;
}
tempNodePtr = paraQueuePtr->front->next;
resultValue = tempNodePtr->data;
paraQueuePtr->front->next = tempNodePtr->next;
if (paraQueuePtr->rear == tempNodePtr) {
paraQueuePtr->rear = paraQueuePtr->front;
}
free(tempNodePtr);
return resultValue;
}
//测试
void testLinkQueue() {
LinkQueuePtr tempQueuePtr;
tempQueuePtr = initQueue();
enqueue(tempQueuePtr, 10);
enqueue(tempQueuePtr, 30);
enqueue(tempQueuePtr, 50);
outputLinkQueue(tempQueuePtr);
printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
printf("dequeue gets %d\r\n", dequeue(tempQueuePtr));
enqueue(tempQueuePtr, 8);
outputLinkQueue(tempQueuePtr);
}
int main() {
testLinkQueue();
return 1;
}
下面是初始化链表:
添加了一个新元素:
以下是该段代码运行结果: