使用C语言创建一个链表环形队列
时间: 2024-10-25 13:09:46 浏览: 36
在C语言中,创建一个环形队列(Circular Queue)需要定义一个节点结构(Node),以及队列头和尾指针(front 和 rear)。这里是一个简单的步骤:
1. 定义节点结构(Node):
```c
typedef struct {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
```
2. 初始化队列:
```c
Node* front = NULL; // 队列头部
Node* rear = NULL; // 队列尾部
int queue_size = 0; // 队列当前元素数量
```
3. 插入操作(Enqueue):
- 如果队列为空(rear == front),则新节点指向front,并更新front和rear。
- 否则,在rear之后插入新节点,然后将rear向前移动一位。
4. 删除操作(Dequeue):
- 如果队列为空,返回错误。
- 否则,删除front节点,将其next节点指向rear,然后更新front到下一个节点。
5. 查看队列是否满(IsQueueFull):
- 当 rear + 1 == front (mod queue_size) 时,表示队列已满。
6. 查看队列是否空(IsQueueEmpty):
- 当 front == rear 时,表示队列为空。
下面是一个简化版的环形队列实现:
```c
void enqueue(int value) {
if (IsQueueFull()) return;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = front;
if (front != NULL) rear->next = newNode;
else front = rear = newNode;
rear++;
queue_size++;
}
int dequeue() {
if (IsQueueEmpty()) return -1; // 返回错误代码
int value = front->data;
Node* temp = front;
front = front->next;
free(temp); // 释放内存
if (front == rear) rear = front; // 清空队列
queue_size--;
return value;
}
```
阅读全文