C语言实现链队列的入队出队操作完整代码
时间: 2024-10-21 15:15:15 浏览: 34
C语言实现链队列代码
在C语言中,我们可以使用结构体和指针来实现链队列。这里是一个简单的单向链表队列的实现,包括入队(enqueue)和出队(dequeue)操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建一个新的节点
Node* create_node(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 入队操作 - 在队尾添加新元素
void enqueue(Node** head, int value) {
Node* newNode = create_node(value);
if (*head == NULL) { // 队列为空的情况
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 出队操作 - 删除并返回队头元素
int dequeue(Node** head) {
if (*head == NULL) { // 队列空
printf("Queue is empty.\n");
return -1; // 返回特殊值表示错误
}
int removedValue = (*head)->data;
Node* temp = *head;
*head = (*head)->next; // 更新头结点
free(temp); // 释放已删除节点
return removedValue;
}
// 打印链队列内容
void print_queue(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 测试入队操作
enqueue(&head, 1);
enqueue(&head, 2);
enqueue(&head, 3);
printf("Queue after enqueue:\n");
print_queue(head);
// 测试出队操作
int value = dequeue(&head);
printf("Dequeued value: %d\n", value);
print_queue(head);
return 0;
}
```
在这个示例中,`enqueue`函数用于将元素添加到队尾,`dequeue`函数从队首移除元素。记得运行这个程序之前,需要包含必要的头文件,并根据需要调整内存管理。
阅读全文