zoukankan      html  css  js  c++  java
  • python算法-栈

    定义:

    栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

    特性:后进先出

    代码:

    # encoding=utf-8

    class Node(object):
    def __init__(self, var):
    self.var = var
    self.next = None

    class Stack(object):
    def __init__(self):
    self.top = None
    #进栈的逻辑:top指向刚刚进来的数据,之前的数据成为top上一个数据
    def push(self,var):
    if var != None:
    packNode = Node(var)
    packNode.next = self.top
    self.top = packNode
    return packNode.var
    else:
    return None
    #出栈的逻辑:打印栈顶元素,top指向下一位
    def pop(self):
    if self.top == None:
    return None
    else:
    tmp = self.top.var
    self.top = self.top.next
    return tmp

    #获取栈顶元素peek()
    def peek(self):
    if self.top == None:
    return None
    else:
    return self.top.var

    #写一个实例方法:获取栈底元素的值,并且在上一题的基础上,打印栈底元素的值,这个平时用不
    到,只是为了加深对栈的理解。
    def bottom(self):
    if self.top == None:
    return None
    node = self.top
    while node.next != None:
    node = node.next
    return node.var

    #进栈1,4,5,2,3,之后出栈3个节点,使用peek方法返回栈顶节点的值
    if __name__=='__main__':
    s = Stack()
    nodeList = [1,4,5,2,3]
    for i in nodeList:
    s.push(i)
    for i in range(0,len(nodeList)-2):
    s.pop()
    print s.peek()
    print s.bottom()

  • 相关阅读:
    20 模块之 re subprocess
    19 模块之shelve xml haslib configparser
    18 包 ,logging模块使用
    vue项目的搭建使用
    课程模块表结构
    DRF分页组件
    Django ContentType组件
    跨域
    解析器和渲染器
    DRF 权限 频率
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8486138.html
Copyright © 2011-2022 走看看