算法基础:基本数据结构的特点:队列 vs 栈
这篇文章介绍一下基本数据结构中队列和栈的特点和复杂度。
线性结构 vs 非线性结构
相较于前文中提到的数组和链表,队列和栈都是线性结构的数据结构。数组和链表的区别之一就在于存储方式上是顺序还是链式(随机),而线性和非线性则从数据的逻辑特性上来分类的,比如队列主要满足先进先出,栈满足后进先出,而实现上使用数组还是链表则都是可以的,具体可以进一步根据前文对于链表和数组的分析来使用。
队列(Queue)
特点
队列也是最为常见的一种数据结构,队列中的元素满足FIFO(先进先出)
- 元素需满足FIFO:First In First Out
- 出口端称为队头(Front),入口端称为队尾(Rear)
- 可以使用数组或者链表来存储数据
- 操作主要有入队(Enqueue)和出队(Dequeue)
- 可以根据需要实现循环队列或者双向队列
- 只能在队尾插入数据,在队头删除数据
实现方式
- 数组方式:使用数组方式实现队列,下标0的元素为队头,最后一个元素之后的数组下标为队尾,队尾元素体现为第一个未保存数据的位置,因此实际的数据容量为数组的长度-1
- 链表方式:使用链表方式实现队列,第一个元素为队头,最后一个元素的next为NULL,队尾元素体现为节点的next指针为NULL的元素,以方便遍历
操作说明
入队(Enqueue)
在队尾插入数据的操作被称为Enqueue,随着新元素的插入,队尾不断后移
出队(Dequeue)
在队头删除数据的操作被称为Dequeue,随着原有数据的删除,队头不断后移
时间复杂度
由于实现方式上可以使用链表或者数组,虽然实现方式不同,不考虑数据元素的查找,入队和出队本身都和队列的长度呈现无关的特性,操作本身的时间复杂度为O(1)
循环队列
以数组方式实现的队列为例进行说明,当连续多次执行入队出队操作时,可能会出现对头前已空出多个未保存的数据,而队尾已到数组的尾部,这种情况之下,可以考虑时使用队头前面未使用的空间,这种就是所谓的循环队列的实现示例。需要考虑的是循环队列已满的情况:
判断条件: 数组方式下,在顺序存储上,队尾当前已经和队头连起来了,队尾的下一个数据即是队头,比如可以表现为:(队尾下标 + 1)%队列长度 = 队头下标
栈(Stack)
特点
栈也是最为常见的一种数据结构,队列中的元素满足FILO(先进后出)
- 元素需满足FILO:First In Last Out
- 最后元素保存的位置称为栈顶(top),最早元素保存的位置称为栈底(bottom)
- 可以使用数组或者链表来存储数据
- 操作主要有压栈(push)和弹栈(pop)
- 只能在栈底进行数据插入数据和删除
实现方式
- 数组方式:使用数组方式实现栈,下标0的元素为栈底,最后一个元素之后的数组下标为栈顶,尾部元素体现为第一个未保存数据的位置
- 链表方式:使用链表方式实现栈,第一个元素为栈底,最后一个元素的next为NULL,栈顶体现为节点的next指针为NULL的元素
操作说明
压栈(push)
新元素只能在栈顶不断插入,新的元素的位置成为新的栈顶
弹栈(pop)
弹栈操作实际就是删除操作也只能在栈顶进行,弹栈之后的元素的位置成为新的栈顶
时间复杂度
不考虑查找的过程,无论那种实现,弹栈操作和压栈操作本身的时间复杂度都是O(1)
算法基础:基本数据结构的特点:队列 vs 栈相关推荐
- 【算法基础】数据结构导论第三章-栈、队列和数组.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg3" ...
- 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)
第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...
- 【算法基础】数据结构导论第七章-排序.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 数据结构 ...
- 【算法基础】数据结构导论第六章-查找.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 本文参考 ...
- 【算法基础】数据结构导论第五章-图.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 本文参考百度文库的多篇文章. 如 ...
- 【算法基础】数据结构导论第四章-树.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 本文参考百度文库的多篇文章. 如需下载ppt文件,请在本 ...
- 【算法基础】数据结构导论第二章-线性表.pptx
上课的课件分享,适合教学用. 文末提供下载 已发布:数据结构导论第一章-绪论 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg2" ppt有动画效果.
- 【算法基础】数据结构导论第一章-绪论.pptx
上课的课件分享,适合教学用. 文末提供下载 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg1"
- 数据结构-链表、队列、栈、哈希表
数据结构指的是任意长度.类型的数据对应的字节在内存中的存放结构.内存存储单元的最小单位是Byte,内存物理上是连续的.无差别的.但是软件可以通过不一样的使用方式来填充.操作内存.例如数组中,数据是顺序 ...
- 【数据结构】用队列实现栈
最新文章
- js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制
- LeetCode OJ:Pascal's TriangleII(帕斯卡三角II)
- Jmeter与ant整合生成美观的测试报告
- python package和目录_PyCharm中Directory与Python package的区别
- 升级无法登录_JeeSite v4.2.2 发布,代码生成增强、Boot 2.3、短信登录、性能提升...
- 树叶节点_茶,一片树叶的旅程
- 使用.NET Standard 2的Elasticsearch,Kibana和Docker
- Win10重装系统后如何合并分区?
- Linux内核管理子系统和进程管理子系统
- 【使用工具和软件汇总】
- log4j-XML文件配置
- med4way:中介效应和交互效应分析
- DDOS误判怎么预防
- Docker网络与资源控制
- 手机离线地图——基于OruxMaps离线高清卫星地图制作发布
- 年薪百万的年轻人都是怎样生活的
- 黑色家具家居茶几沙发网站源码 织梦dedecms模板 [带手机版数据同步]
- 怎么实现在FireFox IE Opera Safari 都可以正常播放WMV和MOV的网页播放器代码
- 「大数据的关键思考系列」15:阿里巴巴的大数据实践(1)
- python使用IE浏览器