python数据结构之队列【转载】
队列:先进先出 应用场景:我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。
第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印.
1、单向队列的实现方法
Queue() : 创建一个空的新队列。 它不需要参数,并返回一个空队列。
enqueue(item) : 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
dequeue() : 从队首移除项。它不需要参数并返回 item。 队列被修改。
isEmpty() : 查看队列是否为空。它不需要参数,并返回布尔值。
size() :返回队列中的项数。它不需要参数,并返回一个整数。
列表方法实现单向队列
class Queue(): def __init__(self): self.items = [] def enqueue(self, item): # 插入数据 self.items.insert(0, item) def dequeue(self): # 删除数据 return self.items.pop() def isEmpty(self): # 判断是否为空 return self.items == [] def size(self): # 获取列表大小 return len(self.items) if __name__ == '__main__': q = Queue() q.enqueue(1) q.enqueue(2) q.enqueue(3) print(q.dequeue()) print(q.dequeue()) print(q.dequeue()) # 输出结果 # 1 # 2 # 3 kids = ['A', 'B', 'C', 'D', 'E', 'F'] queue = Queue() for kid in kids: queue.enqueue(kid) # A对头F队尾 while queue.size() > 1: for i in range(6): # 每循环一次,传递一次 kid = queue.dequeue() queue.enqueue(kid) queue.dequeue() print('获胜的选手是:', queue.dequeue()) # 输出结果 # 获胜的选手是: E
2、双向队列的实现方法
Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
class Deque(): def __init__(self): self.items = [] def addFront(self, item): # 增加到队头 self.items.insert(0, item) def addRear(self, item): # 增加到队尾 self.items.append(item) def removeFront(self): # 从队尾删除 return self.items.pop() def removeRear(self): # 从队头删除 return self.items.pop(0) def isEmpty(self): # 判断队列是否为空 return self.items == [] def size(self): # 获取队列的大小 return len(self.items) def isHuiWen(s): """ 双端队列应用案例:回文检查,回文是一个字符串,读取首尾相同的字符 :param s: :return: """ ex = True q = Deque() for ch in s: q.addFront(ch) while q.size() > 1: if q.removeFront() != q.removeRear(): ex = False break return ex if __name__ == '__main__': q = Deque() q.addFront(1) q.addFront(2) q.addFront(3) print(q.removeRear()) print(q.removeRear()) print(q.removeRear()) # 输出结果 # 3 # 2 # 1 print(isHuiWen('heireh')) # False print(isHuiWen('mdm')) # True
转载:https://www.cnblogs.com/bobo-zhang/p/10525482.html