微信公众号:珷玞的日常
概念
队列:先进先出。只支持两种基本操作:入队,出对。 队列作为一种基础的数据结构,应用也很广泛。
循环队列和链式队列
队列和栈一样,可以使用数组实现,也可以使用链表实现。用数组实现的叫做顺序队列,用链表实现的叫做链式队列。
# 4-1 顺序队列
# 实现线性队列
# 实现线性队列
class Queue():
def __init__(self,size):
self.size = size
self.head = 0
self.tail = 0
self.queue = [0]*self.size
def enqueue(self,x):
if self.isfull():
raise Exception("queue is full")
else:
self.queue[self.tail] = x
self.tail += 1
def dequeue(self):
if self.isempty():
raise Exception("queue is empty")
else:
self.queue[self.head] = 0
self.head += 1
self.reform()
def isfull(self):
return self.tail - self.head == self.size
def isempty(self):
return self.tail == self.head
def reform(self):
# 每次出队列一个都将队列向前移动一位
for i in range(self.size - 1):
self.queue[i] = self.queue[1+i]
self.queue[-1] = 0
self.tail = self.tail - 1
self.head = 0
def showQueue(self):
print(self.queue)
# 4-2 链式队列
# 链式队列
class Node():
def __init__(self,data=None):
self.data = data
self.next = None
class LQueue():
def __init__(self):
self.head = Node()
self.tail = Node()
self.size = 0
def enqueue(self,x):
tem = Node(x)
if self.isempty():
self.head = tem
self.tail = tem
else:
self.tail.next = tem
self.tail = tem
self.size +=1
def dequeue(self):
if self.isempty():
return
else:
self.head = self.head.next
self.size -=1
def isempty(self):
return self.size == 0
def showQueue(self):
if self.isempty():
print("kongde")
else:
print('begin')
size = self.size
temp = self.head
while size>0:
print(temp.data)
temp = temp.next
size -= 1
print('over')
循环队列
在使用顺序队列的时候,由于数组在一次出队后都需要移动,循环列表解决了这个问题。
# 4-3 循环队列
class Queue():
def __init__(self,size):
# 队列实际大小比使用大小的大一个,因为最后一个是空的
self.size = size + 1
self.head = 0
self.tail = 0
self.queue = [0]*self.size
def enqueue(self,x):
if self.isfull():
print("queue is full")
return
else:
self.queue[self.tail] = x
self.tail = (self.tail+1) % self.size
def dequeue(self):
if self.isempty():
print("queue is empty")
return
else:
self.queue[self.head] = 0
self.head = self.head+1
def isfull(self):
return (self.head - self.tail) % self.size == 1
def isempty(self):
return self.head == self.tail
def showQueue(self):
print(self.queue)