"""
实现一个队列的数据结构,使其具有入队列,出队列,查看队列首尾元素,查看队列大小等功能。
"""
# 方法一:数组实现
class MyQueue1:
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
else:
return self.arr[self.front]
# 返回队列尾元素
def getBack(self):
if self.isEmpty():
return None
else:
return self.arr[self.rear - 1]
# 删除队列头元素
def deQueue(self):
if self.isEmpty():
self.front += 1
else:
print('队列已经为空')
# 把新元素加入队列尾
def enQueue(self, item):
self.arr.append(item)
self.rear += 1
# 方法二:链表实现
class LNode:
def __init__(self):
self.data = None
self.next = None
class MyQueue2:
# 分配头结点
def __init__(self):
self.pHead = None
self.pEnd = None
# 判断队列是否为空,如果为空返回true,否则返回false
def empty(self):
if self.pHead is None:
return True
else:
return False
# 获取队列中元素的个数
def size(self):
size = 0
p = self.pHead
while p is not None:
p = p.next
size += 1
return size
# 入队列:把元素e加到队列尾
def enQueue(self, e):
p = LNode()
p.data = e
if self.pHead is None:
self.pHead = self.pEnd = p
else:
self.pEnd.next = p
self.pEnd = p
# 出队列, 删除队列首元素
def deQueue(self):
if self.pHead is None:
print('出队列失败, 队列已经为空')
self.pHead = self.pHead.next
if self.pHead is None:
self.pHead = None
# 取得队列首元素
def getFront(self):
if self.pHead is None:
print('获取队列首元素失败, 队列已经为空')
return None
return self.pHead.data
# 取得队列尾元素
def getBack(self):
if self.pEnd is None:
print('获取队列尾元素失败, 队列已经为空')
return None
return self.pEnd.data
if __name__ == '__main__':
queue = MyQueue1()
queue.enQueue(1)
queue.enQueue(2)
print('队列头元素为:' + str(queue.getFront()))
print('队列尾元素为:' + str(queue.getBack()))
print('队列大小为:' + str(queue.size()))
queue = MyQueue2()
queue.enQueue(1)
queue.enQueue(2)
print('队列头元素为:' + str(queue.getFront()))
print('队列尾元素为:' + str(queue.getBack()))
print('队列大小为:' + str(queue.size()))
运行结果如下:
队列头元素为:1
队列尾元素为:2
队列大小为:2
队列头元素为:1
队列尾元素为:2
队列大小为:2