栈(Stack)的Python实现

什么是栈

栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)链表或是先进后出链表(FIRST IN LAST OUT)。

举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。
在这里插入图片描述
栈有两种操作:

  • 进栈指令(PUSH):在栈中现有元素顶部添加一个元素,新加入的元素变为最顶端的元素。
  • 出栈指令(POP):取出栈顶元素,删除栈中的这个元素。

有些情况下,栈的最大长度有限。如果栈中元素已经达到最大长度,再用进栈指令会造成堆栈上溢出(stack overflow),相似的,如果堆栈已空还用出栈指令会造成堆栈下溢出(stack underflow)。

栈的python实现

class Stack(object):
    def __init__(self, limit=10):
        self.__items = []
        self.__limit = limit

    def isEmpty(self):
        return self.__items == []

    def peek(self):
        return self.__items[len(self.__items) - 1]

    def size(self):
        return len(self.__items)

    def push(self, item):
        if len(self.__items) >= self.__limit:
            self.double_limit()
        self.__items.append(item)

    def pop(self):
        if len(self.__items) <= 0:
            return -1
        else:
            return self.__items.pop()

    def double_limit(self):
        self.__limit *= 2

if __name__=="__main__":
    myStack = Stack()
    myStack.push(1)
    myStack.push(3)
    myStack.push(5)
    myStack.push(7)
    myStack.push(8)
    print(myStack.size())
    myStack.pop()
    myStack.pop()
    myStack.pop()
    print(myStack.size())

Python中栈的方法

在Python中,列表就类似是一个栈,提供接口如下:

操作描述
s = []创建一个栈
s.append(x)往栈内添加一个元素
s.pop()在栈内删除一个元素
not s判断是否为空栈
len(s)获取栈内元素的数量
s[-1]获取栈顶的元素

python列表方法使得列表可以很方便的作为一个堆栈来使用,用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值