采用链式存储实现队列的初始化、入队、出队、销毁队操作完整代码
时间: 2023-09-18 18:16:25 浏览: 232
这里是使用C语言实现队列的完整代码,包括初始化、入队、出队和销毁队列操作。采用链式存储结构实现队列。
```c
#include <stdio.h>
#include <stdlib.h>
// 队列结点结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node;
// 队列结构体
typedef struct {
Node *front; // 队头指针
Node *rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = NULL;
q->rear = NULL;
}
// 入队操作
void enQueue(Queue *q, int data) {
// 创建新结点
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Error: memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->next = NULL;
// 将新结点插入队尾
if (q->rear == NULL) { // 队列为空,插入第一个结点
q->rear = newNode;
q->front = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队操作
int deQueue(Queue *q) {
if (q->front == NULL) { // 队列为空
printf("Error: queue is empty.\n");
return -1;
}
// 取出队头结点
Node *temp = q->front;
int data = temp->data;
q->front = temp->next;
// 如果队列只有一个结点,则出队后队列为空
if (q->front == NULL) {
q->rear = NULL;
}
free(temp); // 释放出队结点的内存
return data;
}
// 销毁队列
void destroyQueue(Queue *q) {
while (q->front != NULL) {
Node *temp = q->front;
q->front = q->front->next;
free(temp);
}
q->rear = NULL;
}
// 测试队列操作
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
printf("%d\n", deQueue(&q)); // 输出1
printf("%d\n", deQueue(&q)); // 输出2
enQueue(&q, 4);
printf("%d\n", deQueue(&q)); // 输出3
printf("%d\n", deQueue(&q)); // 输出4
printf("%d\n", deQueue(&q)); // 输出错误信息
destroyQueue(&q);
return 0;
}
```
阅读全文
相关推荐















