1.实现一个队列,使其具有入队列,出队列,查看队列收尾元素,查看队列大等功能
2.使用列表和链表实现
列表实现队列
class MyQueue():
def __init__(self):
self.arr = []
self.front = 0 #队头
self.rear = 0 #队尾
def isempty(self):
return len(self.arr) == 0
def size(self):
return len(self.arr)
def return_first(self):
if self.isempty():
return None
return self.arr[self.front]
def return_last(self):
if self.isempty():
return None
return self.arr[self.rear-1]
#删除队列头部元素
def de_fist(self):
if self.rear > self.front:
self.front += 1
else:
print('None')
#把新元素加到队尾
def enQueue(self,item):
self.arr.append(item)
self.rear += 1
if __name__ == '__main__':
q = MyQueue()
q.enQueue(1)
q.enQueue(2)
print(q.return_first())
print(q.return_last())
print(q.size())
4.缺点
以上这种方法最大的缺点是出队后队列头部空间不能被充分利用,可以利用循环队列解决这个问题
5.链表实现队列
class Node():
def __init__(self,value = None):
self.value = value
self.next = None
class MyQueue():
def __init__(self):
self.pHead = None
self.pEnd = None
def empty(self):
if self.pHead == None:
return True
else:
return False
def size(self):
size = 0
p = self.pHead
while p != None:
p = p.next
size += 1
return size
def enQueue(self,e):
p = Node()
p.data = e
p.next = None
if self.pHead == None:
self.pHead =self.pEnd = p
else:
self.pEnd.next = p
self.pEnd = p
def deQueue(self):
if self.pHead == None:
print('队列为空')
self.pHead = self.pHead.next
if self.pHead == None:
self.pEnd = None
def getFront(self):
if self.pHead == None:
print('获取队列首元素失败,队列已经为空')
return None
return self.pHead.data
def getBack(self):
if self.pEnd == None:
print('队列为空')
return None
return self.pEnd.data
if __name__ == '__main__':
q = MyQueue()
q.enQueue(1)
q.enQueue(2)
print(q.getFront())
print(q.getBack())
print(q.size())