用例子解释 Python 中的 Stack!
堆栈是一种线性数据结构,适用于后进先出mechanism(LIFO)。最先进入堆栈的元素是最后被处理的元素。
示例
栈的数据结构可以借助一堆盘子的例子来理解。
盘子一个接一个地堆起来。第一个盘子或盘子在堆的底部,最后一个盘子放在堆或堆的顶部。每当我们需要一个盘子时,我们都会在堆栈的顶部捡起盘子,这是最后插入或放置的盘子。首先放置的盘子将是最后一个被捡起的盘子。因此,遵循后进先出机制。
Python中堆栈的实现
Python中的Stack可以使用其他线性数据结构或Python库中的内置模块以各种方式实现。
方法1-使用列表实现
Python中的堆栈可以使用列表来实现。但是,使用列表来实现堆栈效率不高,因此不推荐。
涉及的操作
append()−此函数在堆栈末尾添加一个元素。
pop()−此函数删除并返回函数中的最后一个或顶部元素,stack.This以LIFO顺序弹出元素。
例子
stack=[] stack.append(1) stack.append(2) stack.append(3) print("Intial Stack",stack) print("Element popped from the stack") print(stack.pop()) print(stack.pop()) print("Stack after popping some elements",stack)
输出
Intial Stack [1, 2, 3] Element popped from the stack 3 2 Stack after popping some elements [1]
一旦堆栈为空,您就无法删除更多元素。这样做会导致异常。
stack.pop() IndexError: pop from empty list
方法2-使用queue.LifoQueue实现
这是使用python的内置模块实现堆栈的方法。我们需要从队列中导入LifoQueue。我们可以初始化LifoQueue或具有特定大小的堆栈。大小为零意味着无限堆栈。
涉及的操作
maxsize-堆栈中允许的最大元素数
get()−移除并返回stack.If栈中的最后一个或顶部元素为空,等待直到栈至少有一个元素。
get_nowait()−移除并返回stack.If栈中的最后一个元素为空,引发异常。
put(item)-在stack.If堆栈已满的末尾追加一个元素,等待空闲插槽可用。
put_nowait(item)-在stack.If栈尾追加一个元素已满,引发异常。
full()-如果堆栈已满则返回真,否则返回假。
empty()-如果堆栈为空,则返回True,否则返回false
qsize()-返回堆栈中存在的元素数
例子
from queue import LifoQueue s=LifoQueue(maxsize=3) s.put(1) s.put(2) s.put(3) print("Is stack full",s.full()) print("Element popped from the stack") print(s.get()) print(s.get()) print("Number of elements in stack",s.qsize()) print("Is stack empty",s.empty())
输出
Is stack full True Element popped from the stack 3 2 Number of elements in stack 1 Is stack empty False
方法三:使用collections.deque实现
这是在Python中实现堆栈的另一种方式。我们需要从collections模块导入deque。
涉及的操作
append()−此函数在堆栈末尾添加一个元素。
pop()−此函数以O(1)的时间复杂度移除并返回堆栈中的最后一个元素。
例子
from collections import deque stack=deque() stack.append(1) stack.append(2) stack.append(3) print("初始堆栈: ",stack) print("Element popped from the stack") print(stack.pop()) print(stack.pop()) print("弹出一些元素后堆栈: ",stack)
输出
初始堆栈: deque([1, 2, 3]) Element popped from the stack 3 2 弹出一些元素后堆栈: deque([1])
pop()在空双端队列上使用函数会引发异常。