C语言循环队列,队头插入
时间: 2024-12-22 11:05:28 浏览: 4
循环队列是一种基于数组实现的队列数据结构,它通过将数组的首尾相连形成一个环,从而有效地利用数组空间。循环队列通常使用两个指针:一个指向队头(front),一个指向队尾(rear)。在循环队列中,插入和删除操作都可以在常数时间内完成。
在队头插入元素时,需要注意以下几点:
1. 检查队列是否已满。
2. 更新队头指针。
3. 将新元素插入到队头。
以下是一个简单的C语言实现循环队列的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 5
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} CircularQueue;
// 初始化队列
void initQueue(CircularQueue *q) {
q->front = 0;
q->rear = 0;
}
// 检查队列是否为空
bool isEmpty(CircularQueue *q) {
return q->front == q->rear;
}
// 检查队列是否已满
bool isFull(CircularQueue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 在队头插入元素
bool enqueueFront(CircularQueue *q, int value) {
if (isFull(q)) {
printf("Queue is full\n");
return false;
}
q->front = (q->front - 1 + MAX_SIZE) % MAX_SIZE;
q->data[q->front] = value;
return true;
}
// 在队尾插入元素
bool enqueueRear(CircularQueue *q, int value) {
if (isFull(q)) {
printf("Queue is full\n");
return false;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
return true;
}
// 删除队头元素
bool dequeueFront(CircularQueue *q, int *value) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return false;
}
*value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return true;
}
// 删除队尾元素
bool dequeueRear(CircularQueue *q, int *value) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return false;
}
q->rear = (q->rear - 1 + MAX_SIZE) % MAX_SIZE;
*value = q->data[q->rear];
return true;
}
// 打印队列
void printQueue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return;
}
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
CircularQueue q;
initQueue(&q);
enqueueFront(&q, 1);
enqueueFront(&q, 2);
enqueueRear(&q, 3);
enqueueRear(&q, 4);
printQueue(&q);
int value;
dequeueFront(&q, &value);
printf("Dequeued front: %d\n", value);
dequeueRear(&q, &value);
printf("Dequeued rear: %d\n", value);
printQueue(&q);
return 0;
}
```
阅读全文