数据结构与算法:栈(Stack)的实现

栈在程序设计当中是一个十分常见的数据结构,它就至关于一个瓶子,能够往里面装入各类元素,最早装进这个瓶子里的元素,要把后装进这个瓶子里的所有元素拿出来完以后才可以把他给拿出来。假设这个瓶子在桌上平放,左边是瓶底,右边是瓶口,那么咱们能够做出下图:
python

 

 能够看到瓶子里一共被我放进了5个元素,分别是1,2,3,4,5。那么最早放进去的元素则是1,紧接着我放入了2,3,4,5.这很容易理解对吧。若是咱们想要把其中的一个元素,好比2取出来,那么咱们须要把3,4,5都取出来才可以拿到2。所以栈这个数据结构遵循的是“先进后出”的原则。咱们能够用python当中的list来表示一个栈,list列表是一个自然的栈结构,能够很容易地表示出栈和入栈。首先咱们定义一个栈的类,再到栈里定义各类栈的实现方法便可,好比出栈,入栈,判断栈是否为空,判断栈的大小等方法,程序以下:数据结构

class Stack():

    def __init__(self):
        # 初始化一个空的列表
        self.__list=[]

        # 压栈,也就是把元素从上方添加上去,可是这里我咋感受是从下方添加进去的,顺序反了?
    def push(self,item):
        self.__list.append(item)

    def pop(self):
        return self.__list.pop()# 弹出栈顶的元素,同时删除栈顶的元素

    # 返回栈顶的元素
    def peek(self):
        return self.__list[len(self.__list)-1]# 也就是获取列表当中的最后一个元素

    # 判断栈是否为空
    def is_empty(self):
        return self.__list == []

    # 计算栈的大小
    def size(self):
        return len(self.__list)


stack = Stack()
print("Is this empty? :",stack.is_empty())

stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)

print("Is this empty? :",stack.is_empty())

print(stack.pop())
print(stack.pop())
print(stack.pop())
print(stack.pop())

能够看到最后咱们建立了一个stack对象来调用里面的方法,并往栈里送入了4个元素,最后使用pop方法依次弹出栈顶的元素,输出以下:app

Is this empty? : True
Is this empty? : False
4
3
2
1

 这就是咱们的数据结构:栈。简单吧!this

相关文章
相关标签/搜索