| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构-队列及其链表方式实现 -> 正文阅读 |
|
[数据结构与算法]数据结构-队列及其链表方式实现 |
目录 1.队列的概念
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。
? 二.队列的实现
队列也可以用顺序表和链表的结构实现,但是由于需要进行一端插入一端删除的操作,如果使用数组的结构,在顺序表头上出数据,需要移动n-1个数据,时间复杂度为O(n),效率会比较低。因此使用链表的结构实现更优一些。我们知道,链表对头部进行操作时间复杂度为O(1),对尾部操作则需要进行‘找尾’操作遍历链表,时间复杂度为O(n)。那么如何在队列实现中提高效率呢?下面我们介绍队列实现的结构。
1.基本结构
其中STDataType为重定义数据类型,这样定义有利于我们通过简便的修改,达到使栈存放不同类型数据的目的。 QNode为链表结点的基础结构,变量_data用于存放数据,而_next为指向下一个结点的指针。 Queue用于对队列进行管理,其头指针_front指向链表头结点,尾指针_rear指向链表尾结点。利用此结构存储头尾结点,即解决了前文尾部操作效率的问题,使其时间复杂度变为O(1)。 2.常见接口
1.QueueInit函数-对队列结构进行初始化
这里需要我们先创建一个队列结构变量,再调用QueueInit函数传入参数对其进行初始化。同理这里也可以实现为QueueCreate函数,即在函数内利用动态内存开辟完成对队列空间指针的创建,并在进行初始化后返回该指针,这里不多赘述,此处介绍前者。
先进行断言防止传入指针为空,然后初始化其内部变量指针为NULL。 2.QueuePush函数-队尾入队列
要插入新数据,则要通过动态内存分配创建新结点指针newnode用于存放数据,当然还需要对开辟是否成功进行判断,若失败,则打印错误信息。若成功,则先初始化新结点,然后进行尾插。此处尾插和链表插入操作相同,不进行赘述。只需注意若队列为空,插入时将newnode赋值给_front和_rear,若队列不为空,则只需将新结点插入尾部,并更新尾部指针_rear。 3.QueuePop函数-队头出数据
此处需要防止队列为空,故进行断言。然后进行头删操作即可,这也在链表里介绍过。只需额外注意若队列只有一个数据进行头删,则需要将_rear置为空。下面图解说明这一点: 如图,若队列大于1个元素,则释放p1结点,_front指向下一个元素即可。 ?然而按照上面的逻辑,当队列只有一个元素时,我们发现_rear指针还指向已被释放的空间,此时该指针便成了野指针,因此需要我们进行置空操作。 4.QueueBack函数-获取队尾元素
断言后返回队尾数据即可。 5.QueueSize函数-获取队列有效元素个数
?由于链表内存空间的不连续,想要获取队列元素个数,只能对链表进行遍历。以cur为变量,头结点为初值开始遍历结点,直到cur为NULL时跳出循环,此处用变量count计数,遍历完成后return count。 6.QueueEmpty函数-判断队列是否为空
条件表达式_front==NULL,若为真,则说明队列为空,返回bool类型值True。否则为假,队列不为空,返回False。 7.QueueDestroy函数-队列的销毁
遍历链表对结点进行依次释放,释放完成后将Queue内变量置为初始值即可。 队列介绍到此结束,感谢阅读! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:47:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |