用结构体来描述链式队列,实现队列的初始化、入队、出队、取队头元素等操作
时间: 2024-10-19 11:08:42 浏览: 40
在使用结构体描述链式队列时,我们可以创建一个结构体作为节点,包含数据域和指向下一个节点的指针。以下是一个简单的链式队列的实现:
```c
// 定义链表节点结构体
typedef struct Node {
int data; // 节点的数据
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 链式队列结构体
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
} Queue;
```
初始化队列:
```c
Queue q = { .front = NULL, .rear = NULL };
```
入队操作 (Enqueue):
```c
void enqueue(Queue* q, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = q->rear;
if (q->rear != NULL)
q->rear->next = newNode;
else
q->front = newNode;
q->rear = newNode;
}
```
出队操作 (Dequeue):
```c
int dequeue(Queue* q) {
if (q->front == NULL)
return -1; // 队列空
int removedValue = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
free(temp); // 释放已处理的节点内存
if (q->front == NULL)
q->rear = NULL; // 队列变为空
return removedValue;
}
```
取队头元素 (Peek/GetFront):
```c
int getFront(Queue* q) {
if (q-1; // 队列空
return q->front->data;
}
```
阅读全文