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

【数据结构与算法】Java描述:第三节:栈与队列

一、 栈(Stack)

1.1 概念 栈:

一种特殊的线性表,其只允许在固定的一端进行插入删除元素操作。

进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据在栈顶。


1.2 栈的方法:



二、队列(Queue)

2.1 概念 队列:

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。

入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)。

在Java中,Queue是个接口,底层是通过链表实现的。


2.2 队列的方法:

2.3 循环队列:

循环队列我们通过数组来实现,循环队列中通常会定义一个头指针(front)和一个尾指针(rear),用于标记队列的头部尾部位置。

头指针front指向队列的第一个元素,尾指针rear指向队列中最后一个元素的下一个位置

在循环队列中,元素的插入和删除都是在尾指针rear的位置进行,当rear到达数组的末尾时,若队列尚有空间,则rear会返回到数组的开头。

小问题:下图循环队列 我们如何把下标从7位置,挪到0位置呢

答案是:(index + 1) % length 

(7 + 1) % 8 = 0

循环列表的判空和判满

判空:一个空的循环队列。头指针和尾指针 都在零位置,所以空的时候就是,他俩下标相等时。

判满:随着数据的添加,头位置一直在向前加,满了以后,不能拿他俩相等作为判断条件,这里我们有三种方式:

1. 通过添加 size 属性记录:这种方法是在循环队列的实现中添加一个size属性,用于记录当前队列中元素的数量。当队列中元素个数等于队列的容量时,即size等于 length 时,表示队列已满。

2. 保留一个位置:在循环队列中,通常会牺牲一个位置不存储元素,这个位置可以用来区分队列是空还是满。当队列满时,队列中的元素数量会比队列的容量少一个。因此,当rear指针与front指针之间的元素数量等于 length -1 时,表示队列已满。

3. 使用标记:这种方法是在循环队列的实现中使用一个标记来表示队列是否已满。当rear指针追上front指针时,表示队列已满。在这种方法中,需要注意处理rear指针追上front指针的情况,以免造成错误的判断。

相关文章:

  • 《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)
  • DeepSeek:中国AGI先锋,用技术重塑通用人工智能的未来
  • WPF基础知识61-80
  • 【python】模块和包相关知识
  • cpu 多级缓存L1、L2、L3 与主存关系
  • Easysearch 使用 AWS S3 进行快照备份与还原:完整指南及常见错误排查
  • 渗透测试之利用sql拿shell(附完整流程+防御方案)【下】
  • 本地搭建DeepSeek R1模型 + 前端
  • docker compose 以redis为例
  • 【2025前端高频面试题——系列一之MVC和MVVM】
  • vue3组合式API怎么获取全局变量globalProperties
  • 机器学习:愚者未完成的诗篇(零)
  • c#面试题整理8
  • (更新完)LPZero: Language Model Zero-cost Proxy Search from Zero
  • 多Agent博弈的场景:博弈是策略选择和均衡问题
  • Docker参数,以及仓库搭建
  • [动手学习深度学习]12.权重衰退
  • 忘记dedecms后台超级管理员账号和密码的解决方案
  • MySQL表中数据基本操作
  • 【语料数据爬虫】Python爬虫|批量采集工作报告数据(1)
  • 浙江演艺集团7部作品组团来沪,今夏开启首届上海演出季
  • 俄方代表团抵达土耳其,俄乌直接谈判有望于当地时间上午重启
  • 盛和资源海外找稀土矿提速:拟超7亿元收购匹克,加快推动坦桑尼亚项目
  • 从能源装备向应急装备蓝海拓展,川润股份发布智能综合防灾应急仓
  • 微软将裁员3%,减少管理层
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够