顺序队列的结构体定义及基本操作(初始化、判空、入队、出队)。用c语言
时间: 2024-12-20 18:28:06 浏览: 35
在 C 语言中,我们可以使用数组或链表来实现一个简单的顺序队列。这里我们选择链表作为基础数据结构:
```c
// 队列节点结构体定义
typedef struct Node {
int data; // 存储的数据
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 队列结构体定义
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
int size; // 队列元素个数
} Queue;
```
**基本操作:**
1. **初始化(Queue_Init)**:
```c
void Queue_Init(Queue* q) {
q->front = q->rear = NULL;
q->size = 0;
}
```
2. **判空(Queue_IsEmpty)**:
```c
int Queue_IsEmpty(const Queue* q) {
return q->front == NULL;
}
```
3. **入队(enqueue 或 Enqueue)**:
```c
void Queue_Enqueue(Queue* q, int value) {
if (q->rear == NULL) { // 如果队尾为空
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
q->front = q->rear = newNode;
} else {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = q->rear;
q->rear->next = newNode;
q->rear = newNode;
}
q->size++;
}
```
4. **出队(dequeue 或 Dequeue)**:
```c
int Queue_Dequeue(Queue* q) {
if (Queue_IsEmpty(q)) {
return -1; // 队列已空,返回错误码
} else {
int removedValue = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next;
free(temp); // 释放当前队首节点
if (q->front == NULL) {
q->rear = NULL;
}
q->size--;
return removedValue;
}
}
```
阅读全文