当前位置: 首页 > article >正文

数据结构的队列

一.队列

1.队列(Queue)的概念就是先进先出。

2.队列的用法,红色框和绿色框为两组,offer为插入元素,poll为删除元素,peek为查看元素红色的也是一样的。

3.LinkedList实现了Deque的接口,Deque又继承于Queue所以,LinkedList可以实现Queue接口

4.这里先删除的1,因为队列是先进先出。然后再不断的取第一个元素。(offer是尾插poll是头删)

二.链表实现队列

通过双向链表的尾插和头删就可以进行队列的模拟比较简单不赘述:

三.数组实现队列

1.这里需要用到循环的数组来进行实现队列。

2.这里我们有三种方法可以来判断数组是否放满或者为空:(下面是我用第3个方法来实现这个队列)

3.这里计算last的位置的时候不能直接++或者用first(头)++,因为一直++可能会越界,所以这里用(last + 1) % len(数组的长度),这样就不会越界。

4.代码展示:

循环数组作为队列,需要头和尾,头来进行删除数据,尾部进行插入数据,在扩建数组的长度的时候需要注意我要把数组的大小增大一倍,因为我是通过判断下一个位置是否为头来判断数组是否满了。这里还需要注意的是,删除数据的时候我们要知道,first也要和last一样通过公式(last + 1) % len(数组的长度)来计算。还需要注意的是获取队尾元素的时候,last可能会在0位置,那么就没办法last-1来找到这个数据了,这个时候我们要通过判断last是否为0,如果为0就直接返回数组长度-1作为下标来获取队尾元素,不能直接返回0的下标,因为你要获取的是队尾元素相当于是0的上一个数据是队尾-1元素的下标的数据,而不是0位置这个数据.

7.双端队列(Deque):两边都可以入队和出队。并且这里还可以通过双端队列来实现队列和栈。需要注意的是Deque是接口,需要创建一个LinkedList的对象才能实现:

8.用法一看便知:

9.队列实现栈:(这里我们是通过两个队列来实现栈的,我们规定两个队列都为空的时候第一个队列存放数据,pop是通过将部位空的队列的n-1个数据移动到空队列中,再将最后一个数据pull出去就是栈pop的元素,获取栈顶元素也是同样的思路,但是栈顶元素需要将n个数据传入到空队列中,并且保存下最后一个数据)

10.栈实现队列:(思路就还是两个栈来实现这个队列,不管什么情况都是把数据放在第一个栈中,当需要队列poll数据的时候我自己实现的两个栈就需要把第一个栈的数据全部pop到第二个栈中来push然后再通过第二个栈来push,因为这样到第二个栈的时候数据就是倒过来的就可以直接push。代码中再pop的时候没有进行判断两个栈是否为空,如果两个栈都为空要返回--1,来判断)


http://www.kler.cn/a/524521.html

相关文章:

  • VPR概述、资源
  • 用HTML、CSS和JavaScript实现庆祝2025蛇年大吉(附源码)
  • 【C语言】main函数解析
  • 蓝牙技术在物联网中的应用有哪些
  • Acwing94递归实现排列型枚举
  • 【Jave全栈】Java与JavaScript比较
  • Helm Chart 实战指南
  • 菜鸟之路Day05一一正则表达式
  • js笔记(黑马程序员)
  • DeepSeek模型:开启人工智能的新篇章
  • Spring Boot - 数据库集成05 - 集成MongoDB
  • Vue+Echarts 实现青岛自定义样式地图
  • 无用知识研究:对std::common_type以及问号表达式类型的理解
  • 论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision?
  • Unity游戏(Assault空对地打击)开发(2) 基础场景布置
  • 对顾客行为的数据分析:融入2+1链动模式、AI智能名片与S2B2C商城小程序的新视角
  • printf和sprintf区别
  • 深入MapReduce——从MRv1到Yarn
  • fscan全家桶更新:fscan免杀版,可过360、火绒、微步云沙箱,其他的自行测试
  • Elasticsearch的开发工具(Dev Tools)
  • 创建实用PPT演讲者备注的有效方法
  • AI赋能医疗:智慧医疗系统源码与互联网医院APP的核心技术剖析
  • FreeRTOS的任务创建和删除
  • C#语言的并发编程
  • STM32 TIM输入捕获 测量频率
  • F1. Omsk Metro (simple version)