Python实现堆栈

Python实现堆栈

首页冒险解谜快餐堆栈更新时间:2024-09-29
什么是堆栈

听到堆栈这个词,头脑可能会想到一堆书,我们就用这个类比来解释堆栈:

1. 在堆栈的顶部有一本书(如果只有一本,那它就是最顶上那一本)

2. 只有拿走最顶部那本书,才可以去拿底下的书(假设一次只能取走一本书)

3. 当从顶部一本一本地拿走全部书时,这时没有剩下的书了,也就不能再拿了

有一个“汉诺塔”游戏,它完美地展示了堆栈是如何工作的。

下面以编程方式描述以上几点:

1 跟踪最顶端的元素,它可以告诉你堆栈中元素的个数,以及堆栈是满还是空(如果堆栈为空,则栈顶被设为0或一个负数)

2.最后一个进栈的元素总是第一个离开(后进先出)

3.如果移除了全部元素,则栈为空,如果尝试从一个空栈中移除元素,就会抛出警告或错误信息

4.如果堆栈达到了最大极限,仍要添加元素,也会抛出警告或错误信息

几个注意事项:

1.元素的入口与出口只能是堆栈的一端(顶部)

2.入栈(Push)--把一个元素压入堆栈

3.出栈(Pop)--从堆栈中移除一个元素

4.不允许随机访问--不能从中间添加或删除元素

注意:要一直跟踪栈顶,它可以告诉我们栈的状态

如何实现堆栈

使用列表实现堆栈

这里定义一个类:Stack,并添加一个方法执行下面的操作:

1.将元素压入栈中

2.从堆栈中弹出元素,如果栈为空,则发出警告

3.获取栈的大小

4.打印堆栈的所有元素

Python不需要像C或C 那样跟踪指针实现堆栈,它可以使用很容易地实现列表。

class Stack:

#构造器创建一个列表

def __init__(self):

self.stack = list()

#向堆栈中添加元素

def push(self,data):

#进行检测,避免出现重复项

if data not in self.stack:

self.stack.append(data)

return True

return False

#从堆栈移除最后一个元素

def pop(self):

if len(self.stack)<=0:

return ("堆栈为空!")

return self.stack.pop()

#获取堆栈大小

def size(self):

return len(self.stack)

myStack = Stack()

print(myStack.push(5)) #打印 True

print(myStack.push(6)) #打印 True

print(myStack.push(9)) #打印 True

print(myStack.push(5)) #打印 False 因为5已经在栈中

print(myStack.push(3)) #打印 True

print(myStack.size()) #打印 4

print(myStack.pop()) #打印 3

print(myStack.pop()) #打印 9

print(myStack.pop()) #打印 6

print(myStack.pop()) #打印 5

print(myStack.size()) #打印 0

print(myStack.pop()) #打印堆栈为空

说明:

不必担心堆栈的大小,因为列表可以为我们呈现

使用数组实现堆栈

Python列表实现堆栈很容易。但如果想在语言未知的情况下实现,就要把列表假定为数组(大小固定),并使用栈顶指针来记录堆栈的状态。

算法

1.声明一个列表,及一个整形MaxSize表示堆栈大小

2.栈顶初始为0

3.入栈操作:

1)检查栈顶是否小于堆栈的MaxSize

a)如果是,向堆栈追加数据,并将栈顶增1

b)如果否,打印堆栈已满信息

4.出栈操作:

1)检测栈顶是否大于0:

a)如果是,从列表中移除最后一个元素,并将栈顶减1

b)如果否,打印堆栈为空信息

5.堆栈大小操作:

栈顶指针的值就是堆栈的大小

class Stack:

#构造器

def __init__(self):

self.stack = list()

self.maxSize = 8

self.top = 0

#向堆栈添加元素

def push(self,data):

if self.top>=self.maxSize:

return ("堆栈已满!")

self.stack.append(data)

self.top = 1

return True

#堆栈移除元素

def pop(self):

if self.top<=0:

return ("堆栈为空!")

item = self.stack.pop()

self.top -= 1

return item

#堆栈大小

def size(self):

return self.top

s = Stack()

print(s.push(1))#打印 True

print(s.push(2))#打印 True

print(s.push(3))#打印 True

print(s.push(4))#打印 True

print(s.push(5))#打印 True

print(s.push(6))#打印 True

print(s.push(7))#打印 True

print(s.push(8))#打印 True

print(s.push(9))#打印堆栈已满!

print(s.size())#打印 8

print(s.pop())#打印 8

print(s.pop())#打印 7

print(s.pop())#打印 6

print(s.pop())#打印 5

print(s.pop())#打印 4

print(s.pop())#打印 3

print(s.pop())#打印 2

print(s.pop())#打印 1

print(s.pop())#打印堆栈为空!

注意:元素9不会添加到堆栈中,因此栈的大小仍为8

除了上面实现的几个方法,还可以添加方法返回栈顶元素,检查堆栈是否为空

堆栈最常使用的场合就是在递归中,不妨写个程序验证以下,如将一句话颠倒过来。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved