如果允许在循环队列的两端进行插入和删除操作c语言代码
时间: 2024-05-10 12:13:48 浏览: 194
可以使用以下代码实现循环队列的插入和删除操作:
```c
#define MAX_SIZE 100 // 循环队列的最大长度
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[MAX_SIZE]; // 队列元素
} Queue;
// 初始化队列
void init(Queue *q) {
q->front = q->rear = 0; // 队头指针和队尾指针均指向队列头部
}
// 判断队列是否为空
int is_empty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int is_full(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
int enqueue(Queue *q, int x) {
if(is_full(q)) // 如果队列已满,不能再插入元素
return 0;
q->data[q->rear] = x; // 将元素插入队尾
q->rear = (q->rear + 1) % MAX_SIZE; // 队尾指针加1
return 1;
}
// 出队操作
int dequeue(Queue *q) {
if(is_empty(q)) // 如果队列为空,不能再删除元素
return -1;
int x = q->data[q->front]; // 获取队头元素
q->front = (q->front + 1) % MAX_SIZE; // 队头指针加1
return x;
}
```
其中,`MAX_SIZE` 定义了循环队列的最大长度,`Queue` 结构体定义了队列的成员变量,包括队头指针、队尾指针和队列元素。`init` 函数用于初始化队列,将队头指针和队尾指针均指向队列头部。`is_empty` 和 `is_full` 函数分别用于判断队列是否为空和已满。`enqueue` 函数实现了入队操作,如果队列已满则返回 0,否则将元素插入队尾。`dequeue` 函数实现了出队操作,如果队列为空则返回 -1,否则获取队头元素并将队头指针加1。
阅读全文