C语言中实现链表队列的元素入队和出队操作?代码是什么
时间: 2024-10-25 16:17:29 浏览: 49
C语言使用非循环双向链表实现队列
在C语言中,我们可以使用单向链表来实现队列的数据结构,因为队列的特点是先进先出(FIFO)。下面是一个简单的例子,展示了如何创建链表队列以及如何实现元素的入队(enqueuing)和出队(dequeuing):
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点定义
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* create_node(int data) {
Node* new_node = (Node*)malloc(sizeof(Node));
if (!new_node)
return NULL;
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 初始化空队列
Node* initialize_queue() {
return NULL;
}
// 入队操作(在队尾添加)
void enqueue(Node** head, int data) {
Node* new_node = create_node(data);
if (*head == NULL) { // 如果队列为空,将新节点设为头结点
*head = new_node;
} else {
Node* current = *head;
while (current->next != NULL) { // 找到队尾并插入
current = current->next;
}
current->next = new_node; // 将新节点连接到队尾
}
}
// 出队操作(删除并返回队首元素)
int dequeue(Node** head) {
if (*head == NULL) { // 如果队列为空,返回NULL
return -1;
}
int data = (*head)->data; // 存储要删除的值
Node* temp = *head;
*head = (*head)->next; // 移除头结点
free(temp); // 释放内存
return data;
}
// 测试代码
int main() {
Node* queue_head = initialize_queue();
enqueue(&queue_head, 10);
enqueue(&queue_head, 20);
enqueue(&queue_head, 30);
printf("Dequeued element: %d\n", dequeue(&queue_head)); // 输出: 10
// ... 继续测试其他操作 ...
return 0;
}
```
阅读全文