基于python实现链式栈 Marathon

"""
    链式栈
    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())
原文地址:https://www.cnblogs.com/davis12/p/13580385.html