python实现
python没有数组的概念,而是用list封装了数组,list可以很好的完成队列的一些需求,而且队列(list)可以无限的增长,python内部完成扩容,数据迁移等操作。当然除了list方式还可以用链表的方式完成队列功能
list方式
class Queue(object):
def __init__(self, limit: int):
"""
:param limit: 限制队列的容量
"""
self.limit = limit
self.data_list = []
def add_data(self, data: int):
# 满了就扩容
if self.is_full():
self.limit *= 2
self.data_list.append(data)
# 弹出队首的数据
def del_data(self):
if not self.is_Empty():
return self.data_list.pop(0)
else:
print("队列为空")
# 判断队列是否为空
def is_Empty(self):
return len(self.data_list) == 0
# 判断是否满了
def is_full(self):
return len(self.data_list) == self.limit
# 查看下一个要处理的数据
def peek(self):
if not self.is_Empty():
return self.data_list[0]
else:
print("队列为空")
def print_list(self):
for data in self.data_list:
print(data, end="<-")
print()
def info(self):
print("当前队列有{}个元素,容量为{}".format(len(self.data_list), self.limit))
q = Queue(5)
q.add_data(1)
q.add_data(2)
q.add_data(3)
print(q.peek())
q.print_list()
q.info()
print(q.del_data())
q.print_list()
q.info()
q.add_data(4)
q.add_data(5)
q.add_data(6)
q.add_data(7)
q.print_list()
q.info()
链表方式
class Node:
def __init__(self, data, nextNode=None):
self.data = data
self.next = nextNode
class Queue:
def __init__(self, limit=10):
self.root = Node(None)
self.head = self.root
self.tail = self.root
self.length = 0
self.limit = limit
def is_Empty(self):
return self.length == 0
def is_Full(self):
return self.length == self.limit
def add_data(self, data):
if self.is_Full():
self.limit *= 2
node = Node(data)
self.tail.next = node
self.tail = node
self.length += 1
def del_data(self):
if self.is_Empty():
print("队列为空")
return
temp = self.head
if temp == self.root:
self.length -= 1
self.head = self.head.next.next
return temp.next
else:
self.length -= 1
self.head = self.head.next
return temp
def print_queue(self):
temp = self.head
while temp:
print(temp.data, end="->")
temp = temp.next
print()
def info(self):
print("当前有{}个元素,容量是{}".format(self.length, self.limit))
def peek(self):
return self.tail
q = Queue(5)
print(q.is_Empty())
print(q.is_Full())
q.info()
q.add_data(1)
q.add_data(2)
q.add_data(3)
q.info()
q.del_data()
q.print_queue()
q.info()
q.add_data(4)
q.add_data(5)
q.print_queue()
q.info()
q.add_data(6)
q.add_data(7)
q.info()
q.print_queue()
q.del_data()
q.print_queue()
q.del_data()
q.print_queue()
q.del_data()
q.print_queue()
q.info()
q.add_data(8)
q.add_data(9)
q.add_data(10)
q.add_data(11)
q.add_data(12)
q.print_queue()
q.info()