Python编程:软件测试与测试开发的数据结构与算法
发表时间: 2023-09-05 16:03
数组和列表暴露了太多的接口,虽然操作灵活,但不可控,容易出错。如果在插入位置写错数据将会改变整个数组的内容
栈是**操作受限的列表
栈只能在一端进行删除和插入操作,遵循先进后出后进先出的原则
class ArrayStack: def __init__(self, volume): self.vol = volume self.count = 0 self.data = [-1] * volume def in_stack(self, value): """入栈""" if self.count == self.vol: return False self.data[self.count] = value self.count += 1 return True def de_stack(self): """出栈""" if self.count == 0: return None self.count -= 1 return self.data[self.count]def test_stack(): array_stack = ArrayStack(5) data = ["a", "b", "c", "d", "e"] for i in data: array_stack.in_stack(i) result = array_stack.in_stack("a") assert not result data.reverse() for i in data: assert i == array_stack.de_stack() assert not array_stack.de_stack()
入栈时间复杂度:O(1)
出栈时间复杂度:O(1)
class LinkStack: class Node: def __init__(self, data): self.data = data self.next = None def __init__(self): self.top = None def en_stack(self, value): """入栈""" new_node = self.Node(value) if self.top is None: self.top = new_node else: new_node.next = self.top self.top = new_node def de_stack(self): """出栈""" if self.top is None: return -1 result = self.top.data self.top = self.top.next return resultdef test_link_stack(): link_stack = LinkStack() data = [1, 2, 3, 4, 5] for i in data: link_stack.en_stack(i) data.reverse() for j in data: assert j == link_stack.de_stack() assert link_stack.de_stack() == -1
入栈时间复杂度:O(1)
出栈时间复杂度:O(1)