算法_栈

语言描述:

先进后出
由如下构成:
1个实例属性 top
3个实例方法:
1)进栈push()
2)出栈pop()
3)获取栈顶元素peek()
4)获取栈底元素bottom()
# encoding=utf-8

class Node(object):#出栈入栈基于什么节点去做的,定义Node
    def __init__(self, var):
        self.var = var
        self.next = None#next指针初始值为None

class Stack(object):#定义栈
    def __init__(self):#实例属性 top-栈顶元素
        self.top = None #top指针初始值为None

    def push(self,var):#实例方法进栈
    #进栈时当前Node节点的next指针需指向原top节点,然后把top指针指向新入栈的元素
        if var != None:
            packNode = Node(var)
            packNode.next = self.top
            self.top = packNode
            return packNode.var
        else:
            return None

    def pop(self):#实例方法出栈;pop方法对top属性实现了一个封装
        if self.top == None:
            return None
        else:
            tmp = self.top.var#栈顶元素是要出栈的元素,栈顶元素的值赋到tmp里
            self.top = self.top.next#top指针指向原top节点的下一元素
            return tmp#然后做返回

    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#当循环结束时next指针就指向最底一个节点
        return node.var

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

 

posted on 2018-03-06 22:09  梦断风陵渡口  阅读(160)  评论(0)    收藏  举报

导航