网站建设的主要客户群体,秦皇岛视频优化代理,智慧教育,域名抢注网站建设原题链接#xff1a;https://leetcode.cn/problems/design-circular-queue/
1. 题目描述 2. 循环队列的概念和结构
为充分利用向量空间#xff0c;克服假溢出现象的方法是#xff1a;将向量空间想象为一个首尾相接的圆环#xff0c;并称这种向量为循环向量。…原题链接https://leetcode.cn/problems/design-circular-queue/
1. 题目描述 2. 循环队列的概念和结构
为充分利用向量空间克服假溢出现象的方法是将向量空间想象为一个首尾相接的圆环并称这种向量为循环向量。存储在其中的队列称为循环队列Circular Queue。循环队列是把顺序队列首尾相连把存储队列元素的表从逻辑上看成一个环成为循环队列。
在操作系统课程讲解生产者消费者模型时可以就会使用循环队列。
循环队列可以使用数组实现也可以使用循环链表实现 3. 思路分析
通过一个定长数组实现循环队列。
入队首先要判断队列是否已满再进行入队的操作入队操作需要考虑索引循环的问题当索引越界需要让它变成最小值。
出队首先要判断队列是否为空再进行出队操作出队也需要考虑索引循环的问题。
判空 队头 队尾
判满 队尾 1 队头
4. 代码实现
typedef struct {int *a;int front;int rear;int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj(MyCircularQueue*) malloc(sizeof(MyCircularQueue));//多开一个方便区分空和满obj-a(int*)malloc(sizeof(int)*(k1));obj-frontobj-rear0;obj-kk;return obj;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj-frontobj-rear;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj-rear1)%(obj-k1) obj-front;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj-a[obj-rear]value;obj-rear;obj-rear%(obj-k1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;obj-front;obj-front%(obj-k1);return true;
}int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj-a[obj-front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj-a[(obj-rearobj-k)%(obj-k1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj-a);free(obj);
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj myCircularQueueCreate(k);* bool param_1 myCircularQueueEnQueue(obj, value);* bool param_2 myCircularQueueDeQueue(obj);* int param_3 myCircularQueueFront(obj);* int param_4 myCircularQueueRear(obj);* bool param_5 myCircularQueueIsEmpty(obj);* bool param_6 myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/