栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构之栈和队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构之栈和队列

栈和队列
    • ***栈***
    • ***队列***

(1)概念:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素 操作。
进行数据插入和删除操作的一端称为栈顶,另一端称为栈底

(2)栈中的元素遵循先进后出的原则

(3)所以说,只要满足元素遵循先进后出的原则,那么这种数据结构都叫做栈,不管你底层是用数组或者链表实现,他们都叫做栈。

(4)压栈和出栈的简单示意图

(4)Java中有一个给使用者写好的栈----->Stack类
(5)Stack类中的方法

模拟实现栈(Stack类)数组版本

(6)总结:栈的元素是从栈顶压栈到栈底,从栈顶获取栈中的元素,所以就会出现元素先进后出的特点

队列

(1)概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头

(2)队列的示意图:

(3)队列的特点:队列元素先进先出,后进后出

(4)不管数据结构的底层是由链表或者数组来实现的,只要满足元素先进先出,后进后出,那么这个数据结构就是队列
(5)队列有顺序对列和循环队列
顺序队列的模拟(底层使用单链表)

循环队列
实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。
底层使用数组来实现队列的时候,我们一般使用循环队列来实现

编写一个循环队列比较难的是出队列和进队列这两部分功能的编写
有两个难点:
一、如何判断循环列表是否为空?
二、如何判断循环列表是满的?

判断循环列表是否为空比较简单—>只要队头和队尾重合就行
解释:队列的删除是对队头进行,每删除一个元素,队头向后移动,只有当队头和队尾重合的时候,队列就只剩一个元素了,所以我们在设计循环队列的时候,可以将队尾多向后移动一位,所以当队头和队尾重合的时候循环队列为空

判断循环列表是满的这个比较难,我提供三种方法:
一、通过设置size变量来记录
二、空一个位置
三、使用标记

循环队列的模拟实现(底层是数组)


这里有循环队列的题,想做可以做一下:
设计循环队列

双端队列
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。
那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。

Java中有给使用者写好一个队列---->LinkedList类

LinkedList类的底层是由双向链表来实现的,所以它的功能比较强大,即可以当队列,也可以当栈,也可当顺序表

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号