2019年链式队列大题
【知识回顾】
顺序表的循环队列
【真题】
请设计一个队列,满足:
(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
- 点赞
- 收藏
- 关注作者
评论(0)