算法四:队列(数据结构部分)
单端队列的实现:
以顺序表为例实现队列:
如果这个队列,经常的操作是添加数据,应该使用:入队使用append,出队使用pop(0)
如果,经常的操作是取数据,应该使用:入队使用insert(0, item),出队使用pop()
总之,出入队有一个时间复杂为O(1),另一个为O(n)。

class Queue:
def __init__(self):
# 这里使用顺序表的列表作为存储的容器
self.__list = []
def enqueue(self, item):
"""往队列中添加一个item"""
self.__list.append(item)
def dequeue(self):
"""从队列头部删除一个元素"""
if self.is_empty():
return
return self.__list.pop(0)
def is_empty(self):
"""判断一个队列是否为空"""
return self.__list == []
def size(self):
"""返回队列的大小"""
return len(self.__list)
if __name__ == '__main__':
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue())
print(q.dequeue())
双端队列的实现:

当只考虑双端队列的左边或右边时,相当于栈
class Deque:
"""双端队列"""
def __init__(self):
# 这里使用顺序表的列表作为存储的容器
self.__list = []
def add_front(self, item):
"""往队列中头部添加一个item"""
self.__list.insert(0, item)
def add_rear(self, item):
"""往队列中尾部添加一个item"""
self.__list.append(item)
def pop_front(self):
"""从队列头部删除一个元素"""
if self.is_empty():
return
return self.__list.pop(0)
def pop_rear(self):
"""从队列尾部删除一个元素"""
if self.is_empty():
return
return self.__list.pop()
def is_empty(self):
"""判断一个队列是否为空"""
return self.__list == []
def size(self):
"""返回队列的大小"""
return len(self.__list)
posted on 2018-01-05 16:25 myworldworld 阅读(71) 评论(0) 收藏 举报
浙公网安备 33010602011771号