队列 Queue
抽象数据类型Queue是先进先出的一种数据结构(先进先出,先到先服务) ,区别于栈(后进后出,后到后服务)
抽象数据类型有如下操作定义:
Queue:创建一个空队列对象,返回值为Queue对象。
enqueue(item):入队操作,将item添加到队尾,无返回值。
dequeue():出队操作,从队首移除数据项,有返回值,返回值为队首数据项。
isEmpty():测试是否空队列,返回值为布尔值。
size():返回队列中数据项的个数。
python实现
采用List来容纳Queue的数据项,list的首段为队列队尾,list的末端为队列队首。
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self,item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
队列应用案例
热土豆问题
from pythonds.basic.queue import Queue
def hotpptato(namelist,num):
simqueue = QUeue()
for name in namelist:
simqueue.enqueue(name)
while simqueue.size > 1:
for i in range(num)
simqueue.enqueue(simqueue.dequeue())
simqueue.dequeue()
return simqueue.dequeue()
print(hotPotato(['bill','xielei','shenxie','kent','bob'],7))
双端队列Deque
双端队列是一种有次序的数据集,和队列相似,不同的是deque既可以从对首加入,也可以从队尾加入,数据项也可以从两端移除。
deque定义的操作如下:
deque():创建一个空双端队列
addFront(item):将item加入队首
addRear(item):将item加入队尾
removeFront():从队首移除数据项,返回值为移除的数据项
removeRear():从队尾移除数据项,返回值为移除的数据项
isEmpty():返回deque是否为空
size():返回deque中是否包含数据项的个数
python实现
class Deque:
def__init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def addFront(self,item):
self.items.append(item)
def addRear(self,item):
self.items.insert(0,item)
def removeFront(self):
return self.items.pop()
def size(self):
return len(self.items)
双端队列应用案列
回文词判定(正念倒念都一样)
import Deque
def palchecker(aString)
chardeque = Deque()
for ch in aString:
chardeque.addRear(ch)
while chardeque.size() > 1 and stillEqual:
first = chardeque.removeFront()
last = chardeque.removeRear()
if first != last:
stillEqual = FAlse
return stillEqual
print(palchecker('radar'))