社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

面向对象的Python:什么是堆栈?

健谈始于戊戌年 • 4 年前 • 276 次点击  

堆栈(Stack)是一种用来存储数据的特殊结构。下面这个例子可以形象地说明这个概念。假设有一落硬币,我们不能从中间取出硬币,只能拿最上面的那一枚。同样,如果要加入新的硬币,也只能放到最上面。


 

由于这样的关系,堆栈还有一个更加形象的名字,叫做“后进先出”(Last In First Out, LIFO)。也就是说,最后放上去的硬币,最先被拿走。所以说,堆栈这样的对象有两种操作:进栈(Push)和出栈(Pop)。其实,很多经典程序设计都用到了堆栈的概念。可以说,如果没有堆栈,很多算法都难以实现。

 

下面我们通过简单的例子来介绍如何在Python中实现堆栈。这里我们会介绍两种方法:过程化程序设计和面向对象程序设计。

 

1. 过程化程序设计

 

首先,我们要考虑如何存储进入堆栈的数值。在这里,我们用Python中的列表(List)来完成这个工作。列表比较简单,可以帮助说明问题。同时,假设堆栈的大小不确定,而且最后一个数值位于堆栈顶部。用下面的Python程序就可以创建堆栈。

my_stack = []

 

然后,定义一个函数,用来向堆栈中存储数据。这里我们要做几个假设: 

  • 函数名叫push

  • 函数有一个参数,参数值将存入堆栈

  • 函数返回值为空

  • 函数将其他值依次放在堆栈的最后。

 

我们定义的函数如下:


def push(value):    my_stack.append(value)


既然定义了进栈的函数,与之对应的就要定义出栈的函数。我们假设: 

  • 函数名叫pop

  • 函数无参数

  • 函数返回从堆栈中取出的值

  • 函数从堆栈顶部取出数值


def pop():    value = my_stack[-1]    del my_stack[-1]    return value

有一点需要说明:这个函数没有检查堆栈是否为空。


我们把上面的程序连起来,看一下数值在堆栈中的运动过程。

my_stack = [] def push(value):    my_stack.append(value)    def pop():    value = my_stack[-1]    del my_stack[-1]    return value    push(3)push(2)push(1) print(pop())print(pop())print(pop())


输出

123


在上面的程序中,先把三个数(3, 2, 1)存入堆栈,然后在把它们提出来。打印出来的顺序是1, 2, 3。这显示了堆栈后进先出的规则。 


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/134896