采用线性数组实现队列,并利用front和rear下标分
采用线性数组实现队列,并利用front和rear下标分别指示队头和队尾位置,当rear下标到达数组尾部时,将队列中所有的元素平移到数组的最前端。设计此队列类,并实现主要算法
答案
class ArrayQueue:
def __init__(self, capacity=10):
self.capacity = capacity
self.data = [None]*capacity
self.front = 0
self.rear = 0
def is_empty(self):
return self.front == self.rear
def size(self):
return self.rear - self.front
def enqueue(self, val):
if self.size() == self.capacity:
raise Exception("队列满")
# rear碰数组尾部,全部平移到最前面
if self.rear == self.capacity:
for i in range(self.size()):
self.data[i] = self.data[self.front+i]
self.rear = self.size()
self.front = 0
self.data[self.rear] = val
self.rear += 1
def dequeue(self):
if self.is_empty():
raise Exception("队列空")
res = self.data[self.front]
self.front += 1
return res