Py学习  »  Python

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

健谈始于戊戌年 • 1 年前 • 143 次点击  

堆栈(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
 
143 次点击