队列的实现

队列 (Queue) ,它是一种运算受限的线性表 , 先进先出 (FIFO First In First Out)
队列是一种受限的线性结构
受限之处在于它只允许在表的前端( front )进行删除操作,而在表的后端( rear )进行插入
操作
类似生活中 优先排队的人, 优先处理 . ( 买票 , 结账等 )
队列常见的操作
enqueue(element) :向队列尾部添加一个(或多个)新的项。
dequeue() :移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() :返回当前队列中第一个元素,也将是最先被移除的元素。队列不做任何变动(不
移除元素,只返回元素信息 —— Stack 类的 peek 方法非常类似)。
isEmpty() :如果队列中不包含任何元素,返回 true ,否则返回 false
size() :返回队列包含的元素个数,与数组的 length 属性类似
普通的队列实现
class Queue: # 定义一个名为Queue的类
    def __init__(self): # 初始化函数,当创建一个新的Queue对象时自动执行
        self.items = [] # 初始化一个空列表,用于存储队列的元素
    def enqueue(self, element): # 入队函数,添加一个新元素到队列尾部
        self.items.append(element)
    def dequeue(self): # 出队函数,移除队列的第一个元素并返回
        if len(self.items) < 1: # 如果队列为空
            return None # 返回None
        return self.items.pop(0) # 否则,移除并返回队列的第一个元素
    def front(self): # 获取队首元素函数,返回队列的第一个元素但不移除
        if len(self.items) < 1: # 如果队列为空
            return None # 返回None
        return self.items[0] # 否则,返回队列的第一个元素
    def is_empty(self): # 检查队列是否为空的函数
        return len(self.items) == 0 # 如果队列长度为0,返回True,否则返回False
    def size(self): # 获取队列大小的函数,返回队列的元素个数
        return len(self.items)

优先级队列的实现

实现优先级队列相对队列主要有两方面需要考虑 :
1. 封装元素和优先级放在一起 ( 可以封装一个新的类 )
2. 添加元素时 , 将当前的优先级和队列中已经存在的元素优先级进行比较 , 以获得自己正确
的位置

class PriorityQueue:
    class QueueElement:
        def __init__(self, element, priority):
            self.element = element
            self.priority = priority

        def __init__(self):
            self.items = []

        def enqueue(self, element, priority):
            queue_element = self.QueueElement(element, priority)
            if self.is_empty():
                self.items.append(queue_element)
            else:
                added = False
                for i in range(len(self.items)):
                    # 注意:我们这里是数字越小,优先级越高
                    if queue_element.priority < self.items[i].priority:
                        self.items.insert(i, queue_element)
                        added = True
                        break
                if not added:
                    self.items.append(queue_element)
def dequeue(self):
    return self.items.pop(0)
def front(self):
    return self.items[0]
def is_empty(self):
    return len(self.items) == 0
def size(self):
    return len(self.items)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值