完整的无需解释
时间: 2025-06-04 19:44:55 浏览: 6
以下是完整的C语言链式队列实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 数据类型定义
typedef int QDataType;
// 链式队列节点结构体
typedef struct QueueNode {
struct QueueNode* next;
QDataType data;
} QNode;
// 链式队列结构体
typedef struct LinkQueue {
QNode* pHead; // 指向队头节点的指针
QNode* pTail; // 指向队尾节点的指针
int size; // 队列中的元素数量
} LinkQueue;
// 创建一个新的链式队列
LinkQueue* queue_create() {
LinkQueue* q = (LinkQueue*)malloc(sizeof(LinkQueue));
if (q != NULL) {
q->pHead = q->pTail = NULL;
q->size = 0;
}
return q;
}
// 销毁链式队列并释放内存
void queue_destroy(LinkQueue* q) {
if (q == NULL) return;
QNode* cur = q->pHead;
while (cur != NULL) {
QNode* tmp = cur;
cur = cur->next;
free(tmp);
}
free(q);
}
// 判断链式队列是否为空
int queue_empty(LinkQueue* q) {
return q->size == 0 ? 1 : 0;
}
// 获取链式队列中元素的数量
int queue_size(LinkQueue* q) {
return q->size;
}
// 入队操作
void enqueue(LinkQueue* q, QDataType x) {
QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (newnode == NULL) return;
newnode->data = x;
newnode->next = NULL;
if (q->pTail == NULL) { // 如果队列为空,则新节点既是头也是尾
q->pHead = q->pTail = newnode;
} else { // 否则将新节点添加到队尾
q->pTail->next = newnode;
q->pTail = newnode;
}
q->size++;
}
// 出队操作
QDataType dequeue(LinkQueue* q) {
if (queue_empty(q)) {
printf("Queue is empty.\n");
exit(-1);
}
QNode* first = q->pHead;
QDataType value = first->data;
q->pHead = q->pHead->next;
if (q->pHead == NULL) { // 如果删除的是最后一个节点,更新尾巴指针
q->pTail = NULL;
}
free(first);
q->size--;
return value;
}
// 测试函数
int main() {
LinkQueue* lq = queue_create();
if (lq == NULL) return -1;
enqueue(lq, 10);
enqueue(lq, 20);
enqueue(lq, 30);
printf("Dequeue: %d\n", dequeue(lq)); // 输出 10
printf("Dequeue: %d\n", dequeue(lq)); // 输出 20
queue_destroy(lq);
return 0;
}
```
此代码实现了链式队列的核心功能,包括创建、销毁、判断空状态、获取大小、入队和出队等功能[^1]。
阅读全文
相关推荐


















