这篇文章介绍一下基本数据结构中队列和栈的特点和复杂度。

线性结构 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 栈相关推荐

  1. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg3" ...

  2. 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)

    第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...

  3. 【算法基础】数据结构导论第七章-排序.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 数据结构 ...

  4. 【算法基础】数据结构导论第六章-查找.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 本文参考 ...

  5. 【算法基础】数据结构导论第五章-图.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 本文参考百度文库的多篇文章. 如 ...

  6. 【算法基础】数据结构导论第四章-树.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 本文参考百度文库的多篇文章. 如需下载ppt文件,请在本 ...

  7. 【算法基础】数据结构导论第二章-线性表.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布:数据结构导论第一章-绪论 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg2" ppt有动画效果.

  8. 【算法基础】数据结构导论第一章-绪论.pptx

    上课的课件分享,适合教学用. 文末提供下载 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg1"

  9. 数据结构-链表、队列、栈、哈希表

    数据结构指的是任意长度.类型的数据对应的字节在内存中的存放结构.内存存储单元的最小单位是Byte,内存物理上是连续的.无差别的.但是软件可以通过不一样的使用方式来填充.操作内存.例如数组中,数据是顺序 ...

  10. 【数据结构】用队列实现栈

最新文章

  1. js中如何得到循环中的点击的这个id_Js篇面试题9请说一下Js中的事件循环机制
  2. LeetCode OJ:Pascal's TriangleII(帕斯卡三角II)
  3. Jmeter与ant整合生成美观的测试报告
  4. python package和目录_PyCharm中Directory与Python package的区别
  5. 升级无法登录_JeeSite v4.2.2 发布,代码生成增强、Boot 2.3、短信登录、性能提升...
  6. 树叶节点_茶,一片树叶的旅程
  7. 使用.NET Standard 2的Elasticsearch,Kibana和Docker
  8. Win10重装系统后如何合并分区?
  9. Linux内核管理子系统和进程管理子系统
  10. 【使用工具和软件汇总】
  11. log4j-XML文件配置
  12. med4way:中介效应和交互效应分析
  13. DDOS误判怎么预防
  14. Docker网络与资源控制
  15. 手机离线地图——基于OruxMaps离线高清卫星地图制作发布
  16. 年薪百万的年轻人都是怎样生活的
  17. 黑色家具家居茶几沙发网站源码 织梦dedecms模板 [带手机版数据同步]
  18. 怎么实现在FireFox IE Opera Safari 都可以正常播放WMV和MOV的网页播放器代码
  19. 「大数据的关键思考系列」15:阿里巴巴的大数据实践(1)
  20. python使用IE浏览器

热门文章

  1. 《明朝那些事儿》--主要人物整理
  2. 【操作系统】CPU调度算法
  3. 腾讯云服务器Lighthouse和CVM区别
  4. 考勤日历插件 android,jQuery手机考勤日历插件
  5. selenium自动化购买火车票+存储数据库
  6. java求第n项斐波那契_【剑指offer】数列——求斐波那契第n项
  7. java 判断是否闰年_输出月份天数_Java判断闰年平年并输出某月的天数
  8. 笔记本Windows7无法连接上家庭wifi,急急急!!!
  9. 取名五行字典(金木水火土)
  10. Python修改图片分辨率(附代码) | Python工具