「携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情」
今天我们来做一下leetcode的每日一题,今天是一道数据结构设计类题目
题目链接在这里622. 设计循环队列
题意
题目大意是,实现一个循环队列,支持若干上述操作,具体操作说明不在赘述,和普通队列类似。
思路
在实现循环队列之前,我们要知道普通队列的问题:
- 使用数组实现普通队列时,随着元素的弹出,队列前面的余下的空间越来越多,这是不得不适用动态扩容。
- 这个问题可以在循环队列中得到解决。循环队列初始化时,有一个默认容量,首尾指针各一个,元素数量cnt,数据空间data。
- 元素入队时,队列中元素如果没有达到容量,那么,可以将尾指针向后一位,如果到达队尾,则需要将尾指针移动到队首对应的位置,具体是(tail + 1) % k,这里用到了取余操作,取余操作在这里溢出时很适合,需要体会一下🤣,我也是最开始觉得很巧妙,后面时间久了才明白其中的道理。
- 元素弹出时,同样将头指针向后移动一位,位置也是(head + 1) % k,同样使用到了取余操作。
- front操作和rear操作都是直接将head tail指针对应的元素返回即可
- isEmpty根据cnt是否为0来判断
- isFull根据cnt是否为k来判断
代码实现
根据上面的思路,可以完成下面的代码实现,重要的是入队和出队时,对指针位置的区域操作🤗
结束语
共勉🍗🍗🍗
如果有更好的分析思路,欢迎大家在评论区发表看法!⛄