在Python中使用列表作为栈和队列


在本文中,我们将学习Python 3.x(或更早版本)中的栈和队列结构。我们将讨论这些数据结构的工作原理和修改。

这包括:

  1. 插入操作(入栈,入队)
  2. 删除操作(出栈,出队)
  3. 显示/遍历操作

先决条件:列表和列表操作

相关数据结构:列表操作

相关图片

在栈中,对象一个接一个地存储,这些对象以与到达顺序相反的顺序移除,即遵循后进先出(LIFO)的概念。LIFO 表示栈数据结构中遵循后进先出的排列方式。

栈的操作:

  • 添加/追加元素:这会将栈的大小增加添加的元素数量,添加发生在上端,即栈的顶部。
  • 删除/移除元素:这涉及两个条件:如果栈为空,则没有元素可供删除,即栈中发生下溢;或者如果栈中存在某些元素,则顶部存在的元素将被移除。这会将栈的大小减少移除的元素数量。
  • 遍历/显示:这涉及访问栈的每个元素并在屏幕上显示。

我们还可以插入一个额外的 peek 功能,即检索栈顶部的值。

栈的特征

  • 插入顺序得以保留。
  • 栈允许重复元素。
  • 存储类似的数据类型。
  • 在解析操作中非常有用。

示例代码

def isEmpty(stk): # checks whether the stack is empty or not
   if stk==[]:
      return True
   else:
      return False

def Push(stk,item): # Allow additions to the stack
   stk.append(item)
   top=len(stk)-1

def Pop(stk):
   if isEmpty(stk): # verifies whether the stack is empty or not
      print("Underflow")
   else: # Allow deletions from the stack
      item=stk.pop()
      if len(stk)==0:
         top=None
      else:
         top=len(stk)
         print("Popped item is "+str(item))

def Display(stk):
   if isEmpty(stk):
      print("Stack is empty")
   else:
      top=len(stk)-1
      print("Elements in the stack are: ")
      for i in range(top,-1,-1):
         print (str(stk[i]))

# executable code
if __name__ == "__main__":
   stk=[]
   top=None
   Push(stk,1)
   Push(stk,2)
   Push(stk,3)
   Push(stk,4)
   Pop(stk)
   Display(stk)

以上代码实现了 Python 3.x(或更早版本)中的栈功能。我们可以通过使用多个 if-else 语句为用户提供选择来创建一个菜单驱动的程序。在这两种情况下,栈的构建概念保持不变。

下面显示的屏幕描绘了上述程序产生的输出。我们还可以使用 input() 函数来实现基于用户的输入系统(这里我实现了静态输入)。

输出

Popped item is 4
Elements in the stack are:
3
2
1

队列

在栈中,对象一个接一个地存储,这些对象以与到达顺序相同的顺序移除,即遵循先进先出(FIFO)的概念。FIFO 表示队列数据结构中遵循先进先出的排列方式。

队列的操作

  • 添加/追加元素:这会将队列的大小增加添加的元素数量,添加发生在后端,即队列的末尾。

  • 删除/移除元素:这涉及两个条件:如果队列为空,则没有元素可供删除,即队列中发生下溢;或者如果队列中存在某些元素,则最前面的元素将被移除。这会将栈的大小减少移除的元素数量。

  • 遍历/显示:这涉及访问栈的每个元素并在屏幕上显示。

我们还可以插入一个额外的 peek 功能,即检索队列末尾/后端的值。

队列的特征

  • 插入顺序得以保留。
  • 队列允许重复元素。
  • 存储类似的数据类型。
  • 在解析 CPU 任务操作中非常有用。

示例代码

实时演示

#Adding elements to queue at the rear end
def enqueue(data):
   queue.insert(0,data)

#Removing the front element from the queue
def dequeue():
   if len(queue)>0:
      return queue.pop()
   return ("Queue Empty!")

#To display the elements of the queue
def display():
   print("Elements on queue are:");
   for i in range(len(queue)):
      print(queue[i])

# executable code
if __name__=="__main__":
   queue=[]
   enqueue(5)
   enqueue(6)
   enqueue(9)
   enqueue(5)
   enqueue(3)
   print("Popped Element is: "+str(dequeue()))
   display()

以上代码实现了 Python 3.x(或更早版本)中的队列功能。我们可以通过使用多个 if-else 语句为用户提供选择来创建一个菜单驱动的程序。在这两种情况下,队列的构建概念保持不变。

下面显示的屏幕描绘了上述程序产生的输出。我们还可以使用 input() 函数来实现基于用户的输入系统(这里我实现了静态输入)。

输出

Popped item is: 5
Elements on queue are:
3
5
9
6

结论

在本文中,我们学习了如何在 Python 3.x(或更早版本)中实现栈和队列数据结构。您可以使用相同的算法在任何其他编程语言中实现栈/队列检测器程序。

更新于: 2019年7月30日

5K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告