链队列的入队出队c语言完整代码
时间: 2024-10-25 17:01:17 浏览: 19
链队列是一种线性表数据结构,它通过头部和尾部的方式来实现元素的添加(入队)和删除(出队)。以下是简单的单链表实现的队列入队和出队操作的 C 语言代码:
```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;
}
// 创建空的链队列
Queue* create_queue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->head = queue->tail = NULL;
return queue;
}
// 入队操作(在队尾添加元素)
void enqueue(Queue* queue, int value) {
Node* newNode = create_node(value);
if (queue->tail == NULL) {
queue->head = queue->tail = newNode;
} else {
queue->tail->next = newNode;
queue->tail = newNode;
}
}
// 出队操作(移除并返回队首元素)
int dequeue(Queue* queue) {
if (queue->head == NULL) {
printf("Queue is empty.\n");
return -1; // 或者抛出异常
}
int removedValue = queue->head->data;
Node* temp = queue->head;
queue->head = queue->head->next;
if (queue->head == NULL)
queue->tail = NULL;
free(temp); // 释放内存
return removedValue;
}
// 打印队列内容
void print_queue(Queue* queue) {
Node* current = queue->head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue* queue = create_queue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
print_queue(queue); // 输出: 1 2 3
int first_element = dequeue(queue);
printf("Dequeued element: %d\n", first_element); // 输出: Dequeued element: 1
print_queue(queue); // 输出: 2 3
return 0;
}
```
这个代码实现了一个名为`Queue`的简单队列结构,并包含了`enqueue`, `dequeue`, 和 `print_queue` 函数。请注意,在实际项目中,您可能需要添加错误处理和更复杂的功能。
阅读全文