C语言实现链队列的入队出队操作
时间: 2024-10-21 11:12:00 浏览: 38
在C语言中,链表是一种常见的数据结构,可以用于实现队列。链队列的基本操作包括入队(Enqueue)和出队(Dequeue)。以下是基本的实现步骤:
1. **定义节点结构**:
```c
typedef struct Node {
int data;
struct Node* next; // 指向下一个节点的指针
} QueueNode;
```
2. **定义队列结构**,包含头结点指针(front)和尾部指针(rear):
```c
typedef struct Queue {
QueueNode* front;
QueueNode* rear;
} Queue;
```
3. **初始化队列**:
```c
Queue q = { .front = NULL, .rear = NULL };
```
4. **入队操作(Enqueue)**:
- 首先检查队列是否已满(空闲节点数为0)
- 如果队列未满,创建新节点,将数据存入并调整尾部指针:
```c
void enqueue(Queue *q, int value) {
if (q->rear == NULL) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
q->rear = q->front;
q->front = newNode;
} else {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
q->rear->next = newNode;
q->rear = newNode;
}
}
```
5. **出队操作(Dequeue)**:
- 检查队列是否为空
- 如果队列非空,删除头部节点并更新头指针:
```c
int dequeue(Queue *q) {
if (q->front == NULL) {
return -1; // 队列为空
}
int value = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
if (q->front == NULL) {
free(temp); // 只有队列剩最后一个元素时才释放内存
}
return value;
}
```
阅读全文