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())
  • 相关阅读:
    ID3、C4.5、CART、RandomForest的原理
    C4.5,CART,randomforest的实践
    logistic原理与实践
    knn原理与实践
    Naive Bayes理论与实践
    Apriori原理与实践
    数据科学家应了解的内容
    数据分析常见的七种思路
    响应式网站宽度分隔
    HTML5的 input:file上传类型控制
  • 原文地址:https://www.cnblogs.com/davis12/p/13580385.html
Copyright © 2011-2022 走看看