用c语言编写代码,在顺序队列的基础上实现链式队列
时间: 2024-10-23 12:16:10 浏览: 39
在 C 语言中,我们通常可以先定义一个节点结构体 (Node),然后创建链式队列的数据结构 (Queue) 和相关的操作函数。以下是简单的链式队列的基本实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链式队列结构体,包含头指针
typedef struct Queue {
Node* front; // 指向队首的指针
Node* rear; // 指向队尾的指针
} Queue;
// 初始化空队列
Queue* createQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = queue->rear = NULL;
return queue;
}
// 入队操作
void enqueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) { // 如果队列为空,设置头尾均为新节点
queue->front = queue->rear = newNode;
} else { // 否则,添加到队尾
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队操作
int dequeue(Queue* queue) {
if (queue->front == NULL) { // 如果队列为空,返回错误
printf("Queue is empty.\n");
return -1;
}
int value = queue->front->data; // 获取并保存数据
Node* temp = queue->front; // 更新头节点为下一个节点
if (queue->front == queue->rear) { // 队列只有一元素,删除头尾
free(temp);
queue->front = queue->rear = NULL;
} else {
queue->front = queue->front->next;
}
return value;
}
// 打印队列内容
void display(Queue* queue) {
Node* current = queue->front;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue* queue = createQueue();
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
display(queue); // 输出: 10 20 30
int removedValue = dequeue(queue);
printf("Removed element: %d\n", removedValue); // 输出: Removed element: 10
display(queue); // 输出: 20 30
return 0;
}
```
阅读全文