leetcode——设计循环队列

这篇具有很好参考价值的文章主要介绍了leetcode——设计循环队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

leetcode——设计循环队列,leetcode,算法,职场和发展
设计循环队列

leetcode——设计循环队列,leetcode,算法,职场和发展
这个题目在这里小编只分享一个解题思路,因为还有一个思路小编还在尝试,一直过不了,还在这里不断尝试,等我试出来的时候我在分享给大家,首先我们在这里给出的是数组的形式,后面在分享单链表的思路,因为数组在内存上是连续的,这里给出的思路是多开出一个空间的内存,然后我们在进行插入和删除,下面给一个图来给大家来看看。
leetcode——设计循环队列,leetcode,算法,职场和发展
我们可以看到我们这个数组其实是来存储四个字节大小的,但是我们多存储一个int类型大小的空间,如果tail+1 == head的话我们就当空间是满的。但是当我们的head是和tail相等的时候我们就可以认为是空的,所以这里多开一个空间的作用就出来了,就是可以保证这两个有区别,如果我们不是多开一个空间的话,我们怎么来保证他是满的还是空的。

leetcode——设计循环队列,leetcode,算法,职场和发展
因为我们是tail是指向数组有效空间的最后一个元素的,所以我们这里不多开一个空间的话,就无法来区别什么时候为空,什么时候是满的时候。我们先来看看他的一个接口函数。

leetcode——设计循环队列,leetcode,算法,职场和发展
让我们来定义这个循环队列是什么个样子的,首先我们得有一个数组来存储,然会k就是题目说的循环队列里面要存储的数据个数,还有我们得有两个来指向head和tail,其实也可以是指针,但是我们这里用数组下标的方式才是最好的。
有了结构体之后下一个就是给的初始化的函数接口,首先肯定就是结构体中a这个指针,我们得给他malloc一个数组空间出来,其次就是head和tail这两个得初始化为一个值,因为我们后面是有判空的一个接口函数,所以这里并不难分析出来一开始的时候就得给初始化成一样的值,所以这里给0是最合适的,是刚开始的时候没有一个数据存储在里面。

leetcode——设计循环队列,leetcode,算法,职场和发展
这里大家可能对这个结构体会有疑问。

leetcode——设计循环队列,leetcode,算法,职场和发展
我们一开始就得开辟空间给obj这个指针,他得指向一个有效空间,大小刚刚好就是结构体的大小,然会a在这个结构体中其实就是一个指针大小,因为我们后面只需要让他指向一个数组空间大小就行了。

后面的判空函数就显得格外简单了

leetcode——设计循环队列,leetcode,算法,职场和发展
只要是相等的时候,就是空,不只是第一次,我们可以看后面的插入和删除如果出现head和tail是相等的时候这个时候也是为空的
leetcode——设计循环队列,leetcode,算法,职场和发展
进行下面的操作之后就是head和tail相等的时候,和我们判断空的时候是一样的,然后需要进行的下一个接口函数就是我们来判断是不是满的时候,因为我们设定的时候tail就是指向后最后一个元素的后面一个元素,所以满的时候就是tail+1 == head的时候,但是我们这个是个循环队列,比如在下面这个图的时候,满的时候进行+1就是越界的行为
leetcode——设计循环队列,leetcode,算法,职场和发展
就是这个时候,如果我们进行+1就是5,那我们这里进行的操作就是用一个取模的方法才是最好的,我们知道当我们一个数模上一个比他大的数的时候还是自己本身,所有这里我们可以先让tail+1因为大多的情况下的时候tail是在中间位置,满了的话head就是他的下一个,所有我们这里还需要进行的操作就是在加上一个k+1,这样的话那就可以保证tail是最后位置的时候取模也不会是0.我们在模上一个k+1就可以解决了。

leetcode——设计循环队列,leetcode,算法,职场和发展
所以我们写成这样就可以解决问题,这里取模的好处就是刚刚好满足循环,我比你大了,我取模就又可以回来了,解决了如何给他循环起来的问题,如果我们用单链表的就写一个循环链表我们来存储数据就可以解决了。

下一个接口函数就是如何进行插入和删除。我们这里插入就是让我们的tail位置放入数据,然后进行插入就可以解决问题,但是插入之后我们tail得往后移动,但是这里最大的问题就是如果tail到尾巴的时候,我们再进行++又就是越界,那leetcode就会给你一个越界访问的提示,所以这里最好的办法还是取模就可以解决这个问题了,首先就是我们tail得+1,然后因为取模的话我们得先给他加上一个数,这个数要不影响最后的结果,取模的最大左右就是当我们给出一个超大数的时候,最后的结果也是模的那个数和0之间,比如我们模上这里的k+1,然后取模的范围就是0—k+1

leetcode——设计循环队列,leetcode,算法,职场和发展
所以我们上面就可以写成这个样子,如果满了的话就不能插入,因为这里返回值是个bool值,所以我们的返回值就是true和false

既然插入需要判断,那删除也是需要判断的,所以空了我们就不要进行删除了。

leetcode——设计循环队列,leetcode,算法,职场和发展
这里也是用了这样的方法,其实取模大家可以多带几个数进行感觉,光说的话理解起来是特别的难受的。

leetcode——设计循环队列,leetcode,算法,职场和发展
去对头的话直接返回就行,但是去队尾的话需要进行一些操作,因为我们规定的是tail后面的元素,所以要返回的应该是tail前面的一个元素的值,那因为tail可能是再数组下标为0位置的地方,所以我们这里就应该用取模,其实大家发先我们就是加上(k+1)的这个值然后整体取%(k+1),(k+1)%(k+1)就是0其实对原来的是不受影响的。。

leetcode——设计循环队列,leetcode,算法,职场和发展
还有就是我们应该怎么来释放我们的空间,看下面的图就是可以知道先后顺序了。

leetcode——设计循环队列,leetcode,算法,职场和发展

那今天的分享就到这里,我们后面再见。

leetcode——设计循环队列,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-752602.html

到了这里,关于leetcode——设计循环队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】设计循环队列

      🧑‍🎓 个人主页:简 料   🏆 所属专栏:C++   🏆 个人社区:越努力越幸运社区   🏆 简       介: 简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~ C/C++学习路线 (点击解锁) ❤️ C语言阶段(已结束) ❤️ 数据结构与算法(ing) ❤

    2024年01月17日
    浏览(33)
  • 【数据结构与算法】用队列实现栈&&用栈实现队列&&设计循环队列

    🌠 作者:@ 阿亮joy. 🎆 专栏:《数据结构与算法要啸着学》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、

    2024年01月20日
    浏览(32)
  • Leetcode循环队列

    这道题十分考验我们对队列的理解。 队列的介绍   队列是一种只允许在一段进行插入,在另一端进行删除的数据操作的特殊线性结构,,因此决定了他具有先入先出的特点,其中进行插入操作的一段叫做队尾,出队列的一端叫做队头。 队列的实现   队列可以使用链表或者

    2024年02月06日
    浏览(26)
  • 【数据结构与算法分析】使用C语言实现队列的两种(带头结点与不带头结点)链式存储,并且给出一种循环队列的设计思想

      当我们编写程序时,经常需要处理各种数据结构。队列是一种常见的数据结构,它有着广泛的应用场景。队列的基本操作包括入队和出队,应用于模拟等待队列、消息队列、计算机缓存等场合。   在实际编程中,我们可以用不同的数据结构来实现队列。本文主要介绍了

    2024年02月08日
    浏览(47)
  • 【C语言】【LeetCode】循环队列

    目录  (一)题目描述 (二)数据结构的选择 (三)函数接口的分析实现  正文开始:         题目链接:622. 设计循环队列         设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循

    2024年03月15日
    浏览(37)
  • LeetCode | 循环队列的爱情【恋爱法则——环游世界】

    首先要给读者普及的知识就是这个环形队列。在前面我们有讲到过顺序队列,对于顺序队列,它在入队的后让【rear】指针++,当【rear == MaxSize - 1】时,此时就会形成队满(上溢出),不能再进队元素了,可是实际上,当rear 与 MaxSize - 1】相等时,队列中可能还会有空的位置,

    2024年02月02日
    浏览(32)
  • Leetcode循环队列(数组实现及链表实现)

    这道题十分考验我们对队列的理解。 队列的介绍   队列是一种只允许在一段进行插入,在另一端进行删除的数据操作的特殊线性结构,,因此决定了他具有先入先出的特点,其中进行插入操作的一段叫做队尾,出队列的一端叫做队头。 队列的实现   队列可以使用链表或者

    2024年02月05日
    浏览(33)
  • 【数据结构和算法】--队列的特殊结构-循环队列

    循环队列是队列的一种特殊结构,它的 长度是固定的 k ,同样是 先进先出 ,理论结构是 首尾相连的环形循环结构 。其理论结构大致如下: 具体结构描述可以参考 LeetCode : 622. 设计循环队列的题目要求,大致如下: 设计你的循环队列实现。 循环队列是一种 线性数据结构 ,

    2024年02月04日
    浏览(35)
  • 【数据结构与算法】03 队列(顺序队列--循环队列--优先级队列--链队列)

    队列( queue )是一种常见的数据结构,它遵循先进先出(FIFO)的原则。队列可以理解为一个具有两个端点的线性数据结构,其中一个端点称为\\\"队尾\\\"(rear),用于插入新元素,另一个端点称为\\\"队首\\\"(front),用于移除元素。新元素被插入到队尾,而最早插入的元素总是在队

    2024年02月08日
    浏览(43)
  • 什么?要求设计一个循环队列?

    🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯C语言初阶 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介::讲解用c语言实现数据结构的循环队列. 先声明一下: 题目来源:力扣(LeetCode) 题目名称: 设计循环队列 :题目链接 难度: 中等 介绍: 设计你的

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包