设计循环队列(LeetCode)题目
创始人
2025-05-31 15:12:46
0

这个也是力扣的题目,所以我们还是直接看

7dab41812b4840acaf14c2531000f890.png

100b21fe24514fe2b33cf6e01a78db9d.png 

请自己看题目

下面就看思路吧,首先是循环队列,我们想一下循环队列如何设计,用什么设计比较好一点,用顺序表还是链表

这里用链表看起来比较简单,因为他是循环的,所以尾节点可以直接连接到头节点就实现了循环队列,但是仔细想一下,前面malloc节点也是一个问题 ,并且malloc到一定的数量就不能再增加了,所以链表并不是一个很明智的选择

所以我们用顺序表实现,可是用顺序表如何实现?他的底层是连接的,那么如何实现循环?

所以我们可以实现逻辑循环就可以,我们可以看一下大概是这个样子

5b36187377b547b882f1f364bbb10956.png

 但是这样看起来并不好看,所以我们可以画成这样,看起来好看一点

dcbd41a174f147ab97a6286aedceb7c4.png

 就是这样,比较好看一点

我们将一下思路,我们可以malloc一个定长大小的空间,然后我们可以定义两个变量,一个front和rear(从名字也能看出来是啥意思),所以我们可以让rear往后走

5b4fc324579a490988e60faf6491c3bd.png

7c4667fced334d3daae0f0deaf0eb8c8.png 

827ae1f407ff4de0b0649de1ca90e0e3.png 

 但是这里的满和空的结果就是一样的了,所以无法判断满和空

所以我们可以多开一个空间,这样就是不一样了

661915927b8748c4918c6fd3d5eddd76.png

所以这样满的条件就是rear+1%(链表的长度) 是否等于front,如果等于的话就满了,如果没满的话就不等于

如果空的话就是rear等于front

就是这样,所以我们下面看一下实现

 1b3f62b0f72841308f64e69309c9456a.png

就是这样,里面的一个int类型的指针,还有就是rear和front,还有就是capacity这个是用来记录malloc了多少个数据的

下面在看一下

6b260523719849f1839d13e0c8ab63bb.png 

这里是和上一个题是一样的

下面在看一个

c55bae97e01443f2ae32a52a4cca090c.png 

看一下判断是否为空 和 是否为满,这个和我们前面说的思想是一样的,就是看是否 rear+1%(链表的长度) 是否等于front,如果等于的话就满了,如果没满的话就不等于

还有就是如果空的话就是rear等于front

就是这样

下面看一下Push

eb0c28af74dd434598922677b35cb67f.png

插入就是看是否为满,满了就返回false,否则就插入

4db49aa73cf3400ca586884d734ec970.png

我们看一下这个情况,如果是这样的话是可以继续插入的,但是这时候当他到了满了的时候,rear在++的话就超出范围了,所以我们需要在他++结束之后我们需要%一下capacity这就是为什么存他最大存储个数的原因了

所以我们就需要让他%capacity

然后在返回true

f93928f2250543bda5331880123153a4.png 

这个是删除,首先判断是否为空,为空的话就不能删除

下面就可以正常删除了,我们删除只需要++front就可以了,但是这里也是和Pop的时候是一样的front也可能会这样

eb593ebf6039468597fa61da47c05173.png 

如果是这样的话,front++也会超出最大范围,所以也需要%capacity

然后再返回true

 下面看一下取front的数据

f66e58ec035d4b3ba8a3a317790bcf31.png

这里如果为空的话就返回-1

如果不为空的话就返回这个位置的数据

下面在看一下取rear的数据

6e229ceb1184422fbc3be9ff8a5b95fa.png 

这里也是如果为空就返回-1

如果不为空,这里还是有两种情况,如果rear为0的话,这里就不能反悔rear -1位置的数据了,因为这里会变成负数,导致报错,所以这里是0的话就需要返回capacity位置的数据,如果他不是0的话就要正常返回rear-1位置的数据就可以了

下面看一下销毁

873a774cace84098bcb18fffed06d67f.png

这里就直接free他里面的a就可以了,然后把里面的其他数据置为0

结束

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...