加上队列q实现初始化、入队、出队和判断队列是否为空的操作。
时间: 2024-10-26 14:02:33 浏览: 24
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
队列`q`通常使用数组或链表来实现。这里是一个简单的基于数组的队列实现,包含了初始化、入队、出队和判断队列是否为空的操作:
```c
// 假设ElementType大小固定
#define MAX_SIZE 100
typedef struct {
ElementType data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void InitializeQueue(Queue *q) {
q->front = q->rear = -1;
}
// 判断队列是否为空
bool IsQueueEmpty(const Queue *q) {
return q->front == -1;
}
// 入队操作
void Enqueue(Queue *q, ElementType value) {
if (IsQueueFull(q)) return; // 如果队列已满,不再添加
if (q->front == -1) q->front = 0; // 队列首次添加元素,设置front
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[q->rear] = value;
}
// 出队操作
ElementType Dequeue(Queue *q) {
if (IsQueueEmpty(q)) return INT_MAX; // 返回特殊值表示队列为空
ElementType value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
if (q->front == q->rear) q->front = q->rear = -1; // 队列只剩下一个元素,更新front和rear
return value;
}
// 判断队列是否已满
bool IsQueueFull(const Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
```
这个实现中,我们使用两个指针`front`和`rear`来追踪队首和队尾的位置。当队列满时,新的元素会被添加到当前`rear`位置之后;当队列只有一个元素时,`front`和`rear`会指向同一个位置。通过取模运算 `% MAX_SIZE`,我们可以循环利用数组空间避免溢出问题。
阅读全文