题目描述:
实现一个队列的数据结构,使其具有入队列、出队列、查看队列首尾元素、查看队列大小功能等。
分析与解答:
与实现栈的方法类似,队列的实现也有两种方法,分别为采用数组来实现和采用链表来实现。
# 实现队列
class MyQueue():
def __init__(self):
self.arr=[]
self.front=0 # 队列头
self.rear=0 #队列尾
# 判断队列是否为空
def isEmpty(self):
return self.front == self.rear
# 返回队列的大小
def size(self):
return self.rear-self.front
# 返回队列首元素
def getFront(self):
if self.isEmpty():
return None
return self.arr[self.front]
# 返回队列尾元素
def getBack(self):
if self.isEmpty():
return None
return self.arr[self.rear-1]
# 删除队列头元素
def deQueue(self):
if self.rear > self.front:
self.front += 1
else:
print("队列已经为空")
# 把新元素加入队尾
def enQueue(self, item):
self.arr.append(item)
self.rear += 1
# if __name__=="__main__":
# queue = MyQueue()
# queue.enQueue(1)
# queue.enQueue(2)
# print("队列的头元素为:"+str(queue.getFront()))
# print("队列的尾元素为:"+str(queue.getBack()))
# print("队列的大小为:"+str(queue.size()))
"""链表实现队列"""
class LNode():
def __init__(self):
self.data = None
self.next = None
class MyQueue:
# 分配头结点
def __init__(self):
self.pHead=None
self.pEnd=None
# 判断队列是否为空,如果为空返回true,否则返回false
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
# 入队列:把元素e加到队列尾
def enQueue(self, e):
p = LNode()
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__":
queue = MyQueue()
queue.enQueue(1)
queue.enQueue(2)
print("队列的头元素为:"+str(queue.getFront()))
print("队列的尾元素为:"+str(queue.getBack()))
print("队列的大小为:"+str(queue.size()))