python-队列

队列
队列是由一系列对象组成的集合,这些对象的插入和删除遵循先进先出的原则。也就是说,元素可以在任何时刻进行插入,但只有处在队列最前面的元素才能被删除 通常将队列允许插入的一端称为队尾,将允许删除的一端则称为队头

队列的抽象数据类型
Q为队列的一个实例
Q.enqueue(e):向队列Q的队尾添加一个元素
Q.dequeue():从队列Q中移除并返回第一个元素,如果队列为空,则触发一个错误
Q.first():在不移除的前提下返回队列中的第一个元素;如果队列为空,则触发一个错误
Q.is_empty():如果队列Q没有包含任何元素则返回布尔值True
len(Q):返回队列Q中元素的数量

基于数组的队列实现
_data:指一个固定容量的列表实例
_size :是一个整数,代表当前存储在队列内的元素的数量
_front:是一个整数,代表_data实例队列中第一个元素的索引

class Empty(Exception):
    pass #占位语句
class ArrayQueue:
    DEFAULT_CAPACITY=10
    def __init__(self):
        self._data=[None]*ArrayQueue.DEFAULT_CAPACITY
        self._size=0
        self._front=0
    def __len__(self):
        return self._size
    def is_empty(self):
        return self._size==0
    def first(self):
        if self.is_empty():
            raise Empty('Queue is empty')
        return self._data[self._front]
    def dequeue(self):
        if self.is_empty():
            raise Empty('Queue is empty')
        answer=self.data[self._front]
        self.data[self._front]=None
        self._front=(self._front+1)%len(self._data)
        self._size=self._size-1
        return answer
    def enqueue(self,e):
        if self._size==len(self._data):
            self._resize(2*len(self._data))
        avail=(self._front+self._size)%len(self._data)
        self._data[avail]=e
        self._size+=1
    def _resize(self,cap):
        old=self._data
        self._data=[None]*cap
        walk=self._front
        for k in range(self._size):
            self._data[k]=old[walk]
            walk=(1+walk)%len(old)
        self._front=0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值