《数据结构与算法Python语言描述》学习笔记(4)–队列

《数据结构与算法Python语言描述》学习笔记(4)–队列

chap 5 栈和队列

队列先进先出FIFO
队列的基本操作也是一个封闭集合,通常包括:创建新队列对象(如创建空队列);判断队列的是否为空;入队;出队;查看队头;

队列的链接表实现

一端插入,一端删除。带有尾指针的单链表实现队列很easy

队列的顺序表实现

循环顺序表—>循环队列
1)顺序表的开始位置不变;
2)队头变量记录当前队列里第一个元素的位置;队尾变量记录当前队列里最后元素之后的第一个空位
3)队列元素保存在顺序表的一段连续单元里,[q.head:q.rear]左闭右开区间。
4)初始队列为空时,应该让对头指针q.head和队尾指针q.rear指向同一个位置。
5)出队和入队操作分别需要更新变量q.head和q,rear
q.head = (q.head+1) %q.len
q.rear = (q.rear+1)%q.len
6)队满的判断:(q.rear +1)%q.len = q.head

队列的list实现

定义顺序表队列类命名尾SQueue,
1)在SQueue对象里用一个list类型的成分_elems存放队列元素
2)用_head记录队列首元素所在位置的下标和_num记录表中元素的个数
3)_len记录当前表的长度,判断队满;

数据不变式

实现一种数据结构里的操作时,最基本的问题就是这些操作需要维护对象属性之间的正确关系,这样一套关系被称为这种数据结构的数据不变式。
数据不变式说明对象的不同属性的性质,描述它们应满足的逻辑约束关系。数据不变式队相关操作提出了一些约束,作为正确实现的基本保证,包括两方面:
1)所有构造对象的操作,都必须把对象成分设置为满足数据不变式的状态,也即,对象的初始状态应满足数据不变式。
2)每个对象操作都应保证不破坏数据不变式,也就是说,如果队一个朱姑娘台湾好的对象应用一个操作,当操作完成时,还必须保证对象处于完好的状态。

队列实现中考虑的数据不变式:
1)_elems属性引用着队列的元素存储区,是一个list对象,_len属性记录存储区的有效容量
2)_head时队列中首元素的下标,_num始终记录着队列中元素的个数。
3)当时队列的元素总保存在_elems里从_head开始的而连续位置中,新入队的元素存入由_head+_num算出的位置,但需要吧元素村委下标_len的位置时,改为在下标0位置存入该元素。
4)在_num == _len的情况下出现入队列操作,就扩大存储区。

# 队列的list实现
class QueueUnderflow(ValueError):
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值