请用c语言实现并写出代码:若可以在循环队列的两端进行插入和删除操作,写出循环队列的类型定义。
时间: 2023-05-29 14:04:49 浏览: 92
循环队列类型定义:
```c
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} CircularQueue;
// 初始化循环队列
void InitCircularQueue(CircularQueue *q) {
q->front = q->rear = 0;
}
// 判断循环队列是否为空
int IsCircularQueueEmpty(CircularQueue *q) {
return q->front == q->rear;
}
// 判断循环队列是否已满
int IsCircularQueueFull(CircularQueue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
// 在队尾插入元素
void EnCircularQueueRear(CircularQueue *q, int x) {
if (IsCircularQueueFull(q)) {
printf("The circular queue is full.\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
// 在队头插入元素
void EnCircularQueueFront(CircularQueue *q, int x) {
if (IsCircularQueueFull(q)) {
printf("The circular queue is full.\n");
return;
}
q->front = (q->front - 1 + MAXSIZE) % MAXSIZE;
q->data[q->front] = x;
}
// 从队尾删除元素
int DeCircularQueueRear(CircularQueue *q) {
if (IsCircularQueueEmpty(q)) {
printf("The circular queue is empty.\n");
return -1;
}
q->rear = (q->rear - 1 + MAXSIZE) % MAXSIZE;
return q->data[q->rear];
}
// 从队头删除元素
int DeCircularQueueFront(CircularQueue *q) {
if (IsCircularQueueEmpty(q)) {
printf("The circular queue is empty.\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return x;
}
```
注意:在使用 EnCircularQueueFront 和 DeCircularQueueRear 函数时,需要先判断队列是否已满或为空,否则会出现错误。
阅读全文