python中的堆栈_python中的堆栈使用列表或者函数来实现

栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。

由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

2026481-20200505131619630-19165750.png

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放 。。

4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放。

5、程序代码区—存放函数体的二进制代码。

不懂可以参考一下连接

栈结构实现

栈可以用顺序表实现,也可以用链表实现。

栈的操作

Stack() 创建一个新的空栈

push(item) 添加一个新的元素item到栈顶

pop() 弹出栈顶元素

peek() 返回栈顶元素

is_empty() 判断栈是否为空

size() 返回栈的元素个数

ContractedBlock.gif

ExpandedBlockStart.gif

1 classStack(object):2 """栈"""

3 def __init__(self):4 self.items =[]5

6 defis_empty(self):7 """判断是否为空"""

8 return self.items ==[]9

10 defpush(self, item):11 """加入元素"""

12 self.items.append(item)13

14 defpop(self):15 """弹出元素"""

16 returnself.items.pop()17

18 defpeek(self):19 """返回栈顶元素"""

20 return self.items[len(self.items)-1]21

22 defsize(self):23 """返回栈的大小"""

24 returnlen(self.items)25 if __name__ == "__main__":26 stack =Stack()27 stack.push("hello")28 stack.push("world")29 stack.push("itcast")30 printstack.size()31 printstack.peek()32 printstack.pop()33 printstack.pop()34 print stack.pop()

代码结构

利用python中列表的方法实现数据结构中堆栈的“后进先出”的性质

列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。

用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。例如:

ContractedBlock.gif

ExpandedBlockStart.gif

>>> stack = [1, 2, 3]>>> stack.append(4)>>> stack.append(5)>>>stack

[1, 2, 3, 4, 5]>>>stack.pop()5

>>>stack

[1, 2, 3, 4]>>>stack.pop()4

>>>stack.pop()3

>>>stack

[1, 2]

实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值