用c语言定义一个队列,要求用链表实现,使其具有如下功能: (1)初始化队列,要求得到一个空队列; (2) 入队操作,将一个元素放入队列中; (3) 出队操作,将元素从队列中删除; (4) 销毁队列。 以上每一步都做成函数,并给出相关代码。
时间: 2024-12-22 16:29:08 浏览: 4
C语言队列的基本操作
在 C 语言中,我们可以使用结构体和链表的方式来定义一个队列。首先,我们需要创建一个队列节点的结构体,然后定义一个队列头指针作为链表的起点。下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 队列结构体
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
int size; // 队列大小
} Queue;
// 初始化队列
Queue* initQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
if (queue) {
queue->front = queue->rear = NULL;
queue->size = 0;
}
return queue;
}
// 入队操作 - 在队尾添加节点
void enqueue(Queue* queue, int data) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
if (newNode) {
newNode->data = data;
newNode->next = NULL;
if (queue->rear == NULL) { // 如果队列为空
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
} else {
printf("Memory allocation failed!\n");
}
}
// 出队操作 - 删除队首节点
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1; // 返回错误码
}
QueueNode* temp = queue->front;
int data = temp->data;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
queue->size--;
return data;
}
// 销毁队列 - 清理内存并释放所有节点
void destroyQueue(Queue* queue) {
if (queue != NULL) {
QueueNode* current = queue->front;
while (current != NULL) {
QueueNode* next = current->next;
free(current);
current = next;
}
free(queue);
}
}
// 示例
int main() {
Queue* q = initQueue();
enqueue(q, 10);
enqueue(q, 20);
printf("Dequeued element: %d\n", dequeue(q)); // 输出:20
destroyQueue(q);
return 0;
}
```
这个实现包含了初始化、入队、出队以及销毁队列所需的功能。注意,这里只处理了基本的情况,实际应用中可能需要处理更复杂的边界条件和错误处理。
阅读全文