😶🌫️Take your time ! 😶🌫️
💥个人主页:🔥🔥🔥大魔王🔥🔥🔥
💥代码仓库:🔥🔥魔王修炼之路🔥🔥
💥所属专栏:🔥魔王的修炼之路–数据结构🔥
如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的点赞👍和关注💖,支持一下博主。同时记得收藏✨这篇文章,方便以后重新阅读。
文章目录
- 一、题目
- 二、思路
- 三、代码
- 1、创建且初始化
- 2、入队列
- 3、出队列
- 4、查看队首元素
- 5、查看队尾元素
- 6、判空
- 7、判满
- 8、释放
- 四、总结
一、题目
力扣链接
二、思路
循环队列没有固定头的位置,是根据首尾指针来确定的,当我们采用数组的方式开辟了固定大小的队列,每次出队列后,顺序表都会空出来一个位置,为了循环利用,就设计了这个循环队列。
为了分辨rear == front时是为空还是满了,我们选择多开辟一个空间,当rear+1 == front时为满了,rear == front时为空。
- 每次rear或者front++后都要%k+1,因为超过边界要重新从0开始。
三、代码
1、创建且初始化
创建一个结构体里面放要存的数据,并且创建一个该结构体变量然后初始化。
typedef struct {
int rear;
int front;
int* arr;
int k;
} MyCircularQueue;
MyCircularQueue* myCircularQueueCreate(int k) {
MyCircularQueue* creat = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
creat->arr = (int*)malloc(sizeof(int)*(k+1));//多开辟一个空间,当rear+1 == front 时为满,rear == front时为空。
creat->rear = 0;
creat->front = 0;
creat->k = k;
return creat;
}
2、入队列
如果满了返回false,否则就直接入。要注意的是每次rear或者front++后都要%k+1,因为超过边界要重新从0开始。
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
if((obj->rear+1)%(obj->k+1) == obj->front)
return false;
obj->arr[obj->rear++] = value;
obj->rear %= obj->k+1;
return true;
}
3、出队列
判断是否为空,是的话返回false。
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
if(obj->rear == obj->front)
return false;
obj->front++;
obj->front %= obj->k+1;
return true;
}
4、查看队首元素
直接访问就行了。
int myCircularQueueFront(MyCircularQueue* obj) {
if(obj->rear == obj->front)
return -1;
return obj->arr[obj->front];
}
5、查看队尾元素
如果rear不为0,则直接访问rear-1的位置,若为0,要访问队尾的位置。
int myCircularQueueRear(MyCircularQueue* obj) {
if(obj->rear == obj->front)
return -1;
if(obj->rear == 0)
return obj->arr[obj->k];
return obj->arr[obj->rear-1];
}
6、判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
return obj->rear == obj->front;
}
7、判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {
return (obj->rear+1)%(obj->k+1) == obj->front;
}
8、释放
void myCircularQueueFree(MyCircularQueue* obj) {
free(obj->arr);
free(obj);
}
四、总结
- 博主长期更新,博主的目标是不断提升阅读体验和内容质量,如果你喜欢博主的文章,请点个赞或者关注博主支持一波,我会更加努力的为你呈现精彩的内容。
🌈专栏推荐
😈魔王的修炼之路–C语言
😈魔王的修炼之路–数据结构初阶
😈魔王的修炼之路–C++
😈魔王的修炼之路–Linux
更新不易,希望得到友友的三连支持一波。收藏这篇文章,意味着你将永久拥有它,无论何时何地,都可以立即找到重新阅读;关注博主,意味着无论何时何地,博主将永久和你一起学习进步,为你带来有价值的内容。