全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

用链表实现队列,在元素入列和出列时为什么需要判断链表是否为空?

发布时间:2023-10-11 06:29:17
发布人:xqq

一、用链表实现队列,在元素入列和出列时为什么需要判断链表是否为空

结合《算法》这本书之前代码可知已初始化表尾,元素入列如果为空,则用表尾结点初始化表头结点;出列时,操作的是表头结点,当表中元素为空时,first节点中内容正确,last节点仍存有之前内容,需将其置为空。

链式队列

链式队列 : 用链表形式实现的队列。链表结点为队列数据存储区,链表结点包括两部分数据存储区和指针存储区。

数据存储区 :存放真实有效数据的区域。

指针存储区 :存放下一个链表结点的地址。

注意:

1. 链式队列不存在队列已满的情况。在内存足够大的情况下,每次动态申请链表结点内存都会成功,即不会出现队列已满的情况,除非数据量超大内存不够。

2. 链式队列只存在队列为空的情况,在刚创建队列成功时队列为空,或者队列数据已全部出队,则此时队列为空。

3.在链式队列中头结点的数据域不存放有效数据,指针域存放名列前茅个有效数据域的结点地址,头结点的作用是方便对链式队列的操作。

延伸阅读:

二、链式队列数据出队

1.只有在链式队列非空时出队数据才有效。

2.若只有一个有效结点时,需将队尾指针指向头结点,头结点指针域为空。

3.头结点指针指向下下个有效结点。

4.结点数据出队。

5.释放出队结点数据内存。

如下图所示:

//链式队列数据出队

void OutLinkQueue(pLinkQueue queue, int * value)

{

    pNode queNode = 0;//队列结点指针

    if (IsEmptyLinkQueue(queue))

    {

       printf(“链式队列为空,出队失败……\r\n”);

       *value = 0;

       return;

    }

    if (queue->qFront->pNext == queue->qRear)//只有一个有效结点

       queue->qRear = queue->qFront;//队尾指针等于队首指针

    queNode = queue->qFront->pNext;//结点指针指向队首有效结点

    queue->qFront->pNext = queNode->pNext;//队首结点指针指向下个结点

    *value = queNode->dat;//出队结点值

    free(queNode);//释放内存

    printf(“出队成功!出队值:%d  —->  “, *value);

    printf(“队首结点指针:0x%08X    队尾指针:0x%08X\r\n”, queue->qFront->pNext, queue->qRear);

}

#it技术干货

相关文章

Java中遍历数据结构Enumeration和Iterator相比有什么不同?

Java中遍历数据结构Enumeration和Iterator相比有什么不同?

2023-10-11
leetcode为什么提示列表没有len()?

leetcode为什么提示列表没有len()?

2023-10-11
依次插入结点法生成二叉排序树是什么意思?

依次插入结点法生成二叉排序树是什么意思?

2023-10-11
NTFS文件系统的B+树结构与一般的B+树结构有什么区别?

NTFS文件系统的B+树结构与一般的B+树结构有什么区别?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取