基于python实现链式栈
""" 链式栈 linkstack.py 思路分析: 1.源于链表结构 2.封装栈的操作方法(入栈,出栈,栈空,栈顶) 3.链表的开头作为栈顶(不用每次遍历,效率高,怎样实现简单) """ # 链式栈异常 class StackError(Exception): pass # 定义节点类 class Node: """ 思路:将自定义的类视为节点的生成类, 实例对象中包含数据的部分和下一个节点的next """ def __init__(self,val,next = None): self.val = val # 有用数据 self.next = next # 循环下一个节点的关系 # 链式栈 class LinkStack: """ 链式栈: 1.标记栈顶的None, 2.有新元素压入,指向None, 3.top指向新元素, 4.重复2,3步骤, 5. """ def __init__(self): # 标记栈顶位置 self._top = None # 入栈 def push(self, val): # node = Node(val) # 先有节点 # node.next = self._top # 节点的next指向top # self._top = node # top指向节点 self._top = Node(val,self._top) # 一步到位 # 出栈,重新定义方法 def pop(self): if self._top is None: raise StackError("Stack is empty") value = self._top.val self._top = self._top.next return value # 弹出并返回 # 判断栈是否为空 def is_empty(self): return self._top == None # 空返回True # 查看栈顶元素 def top(self): if self._top is None: raise StackError("Stack is empty") return self._top.val if __name__ == "__main__": ls = LinkStack() ls.push(1) ls.push(2) ls.push(3) print(ls.top())