4. 写出一个循环队列的结构体,该队列元素最多是m个
时间: 2024-02-15 20:02:39 浏览: 93
好的,以下是一个循环队列的结构体的定义,该队列元素最多是m个:
```c
typedef struct {
int *data; // 队列数组指针
int front; // 队首下标
int rear; // 队尾下标
int size; // 队列元素个数
int capacity; // 队列容量
} CircularQueue;
// 初始化循环队列
void initCircularQueue(CircularQueue *queue, int m) {
queue->data = (int*)malloc(sizeof(int) * m);
queue->front = queue->rear = 0;
queue->size = 0;
queue->capacity = m;
}
// 判断队列是否为空
bool isEmpty(CircularQueue *queue) {
return queue->size == 0;
}
// 判断队列是否已满
bool isFull(CircularQueue *queue) {
return queue->size == queue->capacity;
}
// 入队
bool enqueue(CircularQueue *queue, int x) {
if (isFull(queue)) {
return false;
}
queue->data[queue->rear] = x;
queue->rear = (queue->rear + 1) % queue->capacity;
queue->size++;
return true;
}
// 出队
bool dequeue(CircularQueue *queue) {
if (isEmpty(queue)) {
return false;
}
queue->front = (queue->front + 1) % queue->capacity;
queue->size--;
return true;
}
// 获取队首元素
int getFront(CircularQueue *queue) {
if (isEmpty(queue)) {
return -1;
}
return queue->data[queue->front];
}
// 获取队尾元素
int getRear(CircularQueue *queue) {
if (isEmpty(queue)) {
return -1;
}
return queue->data[(queue->rear - 1 + queue->capacity) % queue->capacity];
}
```
其中,`data` 表示队列的数组指针,`front` 表示队首下标,`rear` 表示队尾下标,`size` 表示队列中元素的个数,`capacity` 表示队列的容量(即最大元素个数)。
阅读全文