zoukankan      html  css  js  c++  java
  • 基于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())
  • 相关阅读:
    团队作业——系统设计
    团队作业—预则立&&他山之石
    Alpha 冲刺报告2
    Android:Date、String、Long三种日期类型之间的相互转换
    冲刺阶段第一天
    需求分析答辩总结
    用ExifInterface读取经纬度的时候遇到的一个问题
    项目uml设计
    项目选题报告答辩总结
    深夜睡不着,去某乎爬点照片
  • 原文地址:https://www.cnblogs.com/davis12/p/13580385.html
Copyright © 2011-2022 走看看