王道第三章3.2.5-二-04【2019统考真题】请设计一个队列,要求满足...思路详解

4 【2019统考真题】请设计一个队列,要求满足: 初始时队列为空; ②入队时,允许增加队列占用空间; ③出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;④入队操作和出队操作的时间复杂度始终保持为O(1)。请回答下列问题:
1)该队列是应选择链式存储结构,还是应选择顺序存储结构?
2)画出队列的初始状态,并给出判断队空和队满的条件。
3)画出第一个元素入队后的队列状态。
4)给出入队操作和出队操作的基本过程。

我的思路:

刚开始考虑的是 双向链表 队列的队头front是链表的尾指针  队尾是链表的头指针 增设头指针l

开始的时候

typedef struct linkQueue{
int data;
struct linkQueue * next;
struct linkQueue * pre;
}linkQueue;

队空 front==rear

队满 malloc函数或者new 返回false

入队 先判定front->next==null

不是则将front后一个节点 头插 头节点后一节点 (即首元节点前)再rear=rear->pre

是的话就直接新建节点头插

出队 判定rear==front

是 返回false

不是 就e=front->data; front=front->pre;

显然再判断队满的时候有点不严谨

再谈谈王道书的做法

循环链表 先预置一个空节点
初始

 入队三次

 出队一次

 所以

入队时 先判定r->next==f(队满条件),满则建立新节点插入

注意一开始预置的空节点后面也会被使用

出队时 判定r==f (队空条件)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值