"队列的定义、基本操作及存储方式简介"
需积分: 0 166 浏览量
更新于2024-01-13
收藏 252KB DOCX 举报
队列是一种先进先出(first in first out)或后进后出(last in last out)的线性表。队列是限定只能在队尾插入,称为“入队”,在队头删除称为“出队”。不考虑队列“加塞”和“中途退出”情况。队列操作反映“先来先得到服务,后来后得到服务”的原则。日常生活中的队例包括排队买饭、上车等。
队列的基本操作有置空队、入队、出队、取队头元素和判别队为空。置空队表示初始化一个空队;入队表示在队尾插入一个新元素;出队表示在对头删除一个元素;取队头元素表示取对头元素的值,与出队操作不同,对头元素不变;判别队为空用于判断队列是否为空。
队列的存储方式有顺序存储和链式存储两种方式。顺序队列使用一维数组存储。顺序队列的定义是一个固定大小的数组,使用两个指针front和rear分别指向队列的对头和队尾。当队列为空时,front和rear的值都为-1。入队操作时,rear指针向后移动一位,并将新元素插入到rear指针所指向的位置。出队操作时,front指针向后移动一位,表示删除对头元素。
队列的顺序存储有一定的缺点,即数组的长度是固定的,无法动态扩容。另外,入队和出队操作时需要移动元素,效率较低。为了解决这些问题,可以使用链式存储方式。
链式队列使用链表存储。链式队列的定义是一个单链表,使用一个指针front指向队列的对头,使用一个指针rear指向队列的队尾。当队列为空时,front和rear的值都为NULL。入队操作时,创建一个新的节点,并将新节点插入到rear指针所指向的位置后面,然后将rear指针指向新节点。出队操作时,将对头节点删除,并将front指针指向对头节点的下一个节点。
链式队列相比顺序队列具有动态扩容的能力,并且入队和出队操作的时间复杂度为O(1)。但是链式队列需要额外的节点空间用于存储节点信息,因此会占用更多的内存空间。
综上所述,队列是一种先进先出或后进后出的线性表,可使用顺序存储或链式存储两种方式实现。顺序队列使用固定大小的数组存储,通过front和rear指针操作队列;链式队列使用链表存储,通过front和rear指针操作队列。顺序队列的长度固定,需移动元素操作,效率较低;链式队列可动态扩容,入队和出队操作效率高,但占用更多内存空间。
2018-06-27 上传
2022-01-26 上传
2011-05-17 上传
2023-04-03 上传
2023-07-28 上传
2023-05-12 上传
2023-06-28 上传
2023-09-27 上传
2024-02-25 上传
焦虑肇事者
- 粉丝: 942
- 资源: 310
最新资源
- Lanzador-开源
- basic-roguelike:具有基本功能的经典Roguelike。使用ROT.js教程项目的TypeScript版本作为起点
- MyBookManager.zip_教育系统应用_Java_
- TTKMusicplayer:模仿Kugou音乐的TTKMusicPlayer,该音乐播放器使用基于Qt的qmmp核心库在Windows和Linux上使用。
- 2019年10月10日
- IvmukOS-开源
- 带有嵌入式HTTP服务器的,适用于Android和Appium的高效UI布局检查器应用程序是uiautomatorviewer(monitor.bat)的替代产品。-Android开发
- FilesystemTreeHTML
- basic_course_2020-21_-2
- vue node express 商城项目.zip
- ampp.rar_matlab例程_matlab_
- 组合:Mi底漆组合
- QtAutoUpdater:一个Qt库,用于自动检查更新并安装更新
- 黑白简洁html5单页网站模板
- angularLAB
- Blank-Image-Finder:一点点JS来生成小书签,该小书签查找未设置路径的图像