标签:单元测试 queue 需要 def 栈和队列 cep als ini 链表实现
队列
队列和常说的排队差不多,先来的人先走,后面来的人接着走,最后来的人最后走

结构:FIFO
栈和队列是相反的,先进后出,后进先出的结构
队列不是凭空实现的一个结构,还要用之前已经实现过的数据结构来实现
之前学习的结构:
array,list,linkedlist,dll
2. 实现队列的ADT需要有两个基本操作:
push(入队)
pop(出队)
用列表实现:
比如说他是一个固定的列表,向前插入元素的话,这样它的时间复杂度比较高,因为他要把后面入队的元素往列表后面移动,方便出队,所以选择列表不合适。

用单链表实现:
入队实际上等于往root节点后面插入O(n),出队实际上是把最后一个节点删除,效率不高

之前实现过单链表,包含append和remove操作等等,这里选用单链表实现队列的话,会发现有一个popleft方法和append方法,这里两个方法的时间复杂度都是O(1),这样就能方面的用单链表实现队列了。

用双链表实现:
也同样支持这两个方法操作实现的,但是双链表更复杂,所以这里用单链表来实现队列。
代码实现:
class Queue(object):
def __init__(self, maxsize=None):
self.maxsize = maxsize #默认为空,可以push元素到里面
self._item_linked_list = LinkedList() #实例化之前的构造的单链表
def __len__(self):
return len(self._item_linked_list)
def push(self, value): #入队
if self.maxsize is not None and len(self) >= self.maxsize: #判断链表满了的情况
raise Exception('Queue is Full')
return self._item_linked_list.append(value) #否则添加元素
def pop(self):
if len(self) <= 0:
raise Exception('Queue is empty')
return self._item_linked_list.popleft()
#单元测试
def test_queue():
q = Queue()
q.push(0)
q.push(1)
q.push(2)
assert len(q) == 3
assert q.pop() == 0
assert q.pop() == 1
assert q.pop() == 2使用when-Changed的命令监控测试:
安装使用说明:https://pypi.org/project/when-changed/0.2.1/#description
# when-changed -v -r -1 -S ./ 'py.test -s queue.py'
这样就能动态监测代码执行了。
标签:单元测试 queue 需要 def 栈和队列 cep als ini 链表实现
原文地址:http://blog.51cto.com/286577399/2150642