在Python中使用列表作为栈和队列
在本文中,我们将学习Python 3.x(或更早版本)中的栈和队列结构。我们将讨论这些数据结构的工作原理和修改。
这包括:
- 插入操作(入栈,入队)
- 删除操作(出栈,出队)
- 显示/遍历操作
先决条件:列表和列表操作
相关数据结构:列表操作
相关图片
栈
在栈中,对象一个接一个地存储,这些对象以与到达顺序相反的顺序移除,即遵循后进先出(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(或更早版本)中实现栈和队列数据结构。您可以使用相同的算法在任何其他编程语言中实现栈/队列检测器程序。