2019年链式队列大题

举报
野猪佩奇996 发表于 2022/01/22 23:58:13 2022/01/22
【摘要】 【知识回顾】 顺序表的循环队列 【真题】 请设计一个队列,满足: (1)初始时队列为空;(2)入队时,允许增加队列占用空间; (3)出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减; (4)入队操作和出队操作的时间复杂度始终保持为O(1)。 第一问:选链式/顺序存储结构 顺序存储无法满足(2)的...

知识回顾

顺序表的循环队列

真题

请设计一个队列,满足:

(1)初始时队列为空;(2)入队时,允许增加队列占用空间;

(3)出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减

(4)入队操作和出队操作的时间复杂度始终保持为O(1)。

第一问:选链式/顺序存储结构

顺序存储无法满足(2)的“队列占用空间随着入队而增加”,(1)容易满足;

链式存储方便开辟新空间,要求(2)容易满足;

要求(3)出队后的结点并不真正释放,用队头指针指向新的队头结点,新元素入队时,有空余结点则无须开辟新空间,赋值到队尾后的第一个空结点即可,然后用队尾指针指向新的队尾结点,即设计成一个首尾相接的循环单链表(类似循环队列)。设置队头、队尾指针后,链式队列的入队和出队操作的时间负责度均为O(1)。

因此链式存储结构(两段式单向循环链表),队头指针为front,队尾指针为rear。

第二问:画队列初始状态,判断队空和队满的条件

循环链式队列的实现可以参考循环队列,

不同之处在于循环链式队列可以方便增加空间,出队的结点可以循环利用,入队时空间不够也能动态增加

循环链式队列也要区分队满和队空情况,此处参考循环队列牺牲一个单元来判断

初始时,创建只有一个空闲结点的循环单链表,头指针front和尾指针rear均指向空闲结点。

队空的判定条件:front==rear。

队满的判定条件:front==rear->next

第三问:画第一个元素入队后的队列状态

【注意】插入的是右边那个结点(第一个结点),左边的是“队空”时的结点。

第四问:入队&出队基本过程

【解析】在入队和出队具体操作前一定要记得判断队满or对队空(其实第二问也有提示==);

若队满则插入一个新的空结点(不要惯性思维是队满就不能入队。。)

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/108089726

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。