C 设计一个算法,利用循环队列的基本运算求循环队列元素个数
时间: 2024-04-30 10:23:14 浏览: 123
算法思路:
循环队列中元素个数可以通过队列的队尾指针和队头指针计算得出。如果队尾指针大于等于队头指针,则队列中元素个数为队尾指针减去队头指针;否则,队列中元素个数为队列长度加上队尾指针减去队头指针。具体实现如下:
1. 定义循环队列结构体,并初始化队列头和队列尾指针。
2. 判断队列是否为空,如果为空,返回0。
3. 如果队尾指针大于等于队头指针,则队列中元素个数为队尾指针减去队头指针。
4. 否则,队列中元素个数为队列长度加上队尾指针减去队头指针。
5. 返回队列中元素个数。
算法实现:
```
#define MAX_SIZE 100 //循环队列最大长度
typedef struct {
int data[MAX_SIZE]; //队列元素数组
int front; //队头指针
int rear; //队尾指针
} CircularQueue;
//初始化循环队列
void initQueue(CircularQueue *q) {
q->front = q->rear = 0;
}
//判断队列是否为空
int isEmpty(CircularQueue *q) {
return q->front == q->rear;
}
//判断队列是否已满
int isFull(CircularQueue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
//入队操作
void enqueue(CircularQueue *q, int data) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = data;
q->rear = (q->rear + 1) % MAX_SIZE;
}
//出队操作
void dequeue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return;
}
q->front = (q->front + 1) % MAX_SIZE;
}
//计算队列中元素个数
int count(CircularQueue *q) {
if (isEmpty(q)) {
return 0;
}
if (q->rear >= q->front) {
return q->rear - q->front;
} else {
return MAX_SIZE - q->front + q->rear;
}
}
int main() {
CircularQueue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("Queue size: %d\n", count(&q));
dequeue(&q);
printf("Queue size: %d\n", count(&q));
enqueue(&q, 4);
printf("Queue size: %d\n", count(&q));
dequeue(&q);
dequeue(&q);
dequeue(&q);
printf("Queue size: %d\n", count(&q));
return 0;
}
```
阅读全文