写一个c语言程序 利用循环队列的基本运算求循环队列元素个数的算法,删除指定队列中的队尾元素,要求空间复杂度为0或1
时间: 2023-04-04 19:02:44 浏览: 118
fmd.rar_fmd_fmd.rar_循环队列_队列
以下是 CSDN 开发的 C 知道的回答:
对于您的问题,我可以给出以下 C 语言程序:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
int size(Queue *q) {
return (q->rear - q->front + MAX_SIZE) % MAX_SIZE;
}
void enqueue(Queue *q, int x) {
if (isFull(q)) {
printf("Queue is full.\n");
exit(1);
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
exit(1);
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
void deleteTail(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
exit(1);
}
q->rear = (q->rear - 1 + MAX_SIZE) % MAX_SIZE;
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("Size of queue: %d\n", size(&q));
deleteTail(&q);
printf("Size of queue after deleting tail: %d\n", size(&q));
return 0;
}
```
这个程序利用循环队列的基本运算实现了求循环队列元素个数的算法和删除指定队列中的队尾元素。空间复杂度为 0 或 1,因为只使用了一个数组来存储队列元素。
希望这个程序能够帮助您解决问题。如果您有任何其他问题,欢迎随时向我提问。
阅读全文