A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、什么是栈

栈是一系列对象的集合,这些对象的插入和删除遵循**后进先出(LIFO)**原则。
例如:将A压入栈,将B压入栈,将C压入栈,此时A在栈顶,C在栈底。此时弹出栈,会弹出A,再弹出栈,会弹出B,再弹出栈,会弹出C。

二、栈的抽象数据类型

栈是一种支持以下两种操作的抽象数据类型(ADT),下面用S表示一个栈的抽象数据类型实例:

S.push(e):将元素e添加到栈S的栈顶
S.pop():从栈S移除栈顶元素、并返回栈顶元素;若此时栈为空,此操作将出错
为了方便,我们定义了以下访问方法:

S.top():返回栈顶元素,但不移除栈顶元素;若此时栈为空,此操作将出错
S.is_empty():如果栈中不包含任何元素,则返回True
len(S):返回栈中元素的数量
三、栈的实现

1、基于数组的实现

通过list类中append(e)和pop()方法实现栈的push()和pop()

class Empty(Exception):       #对栈为空时,调用pop、top方法报错时定义一个Empty异常类实例
        pass

class ArrayStack:

    def __init__(self):
        self._data = []             #用列表实现栈

    def __len__(self):
        return len(self._data)

    def is_empty(self):
        return len(self._data) == 0

    def push(self,e):
        self._data.append(e)

    def pop(self):
        if self.is_empty():
            raise Empty('Stack is empty')
        return self._data.pop()

    def top(self):
        if self.is_empty():
            raise Empty('Stack is empty')
        return self._data[-1]

---------------------
【转载,仅作分享,侵删】
作者:琪仔要转行回coder
来源:CSDN
原文:https://blog.csdn.net/lllllaaa77/article/details/88387048
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马