发布于 2026-01-06 4 阅读
0

Python数据结构与算法入门。

Python数据结构与算法入门。

图像

Python中的数据结构和算法是计算机科学中最基本的两个概念,也是任何程序员不可或缺的工具。

Python 中的数据结构负责在程序处理数据时,如何组织和存储内存中的数据。而Python 算法则指的是一套详细的指令,用于帮助程序处理数据以达到特定目的。

图像

数据结构用于组织计算机中的存储,以便我们能够轻松访问和更改数据。

队列是计算机科学中最早定义的数据结构。一个简单的 Python 列表可以充当队列和栈,我们也可以使用类和函数来实现栈和队列,今天我们将探讨这两种方法。

队列遵循先进先出( FIFO)规则,在编程中用于排序。栈和队列通常用数组或链表来实现。

1)堆栈。

栈是一种遵循后进先出(LIFO)原则的数据结构。要实现一个栈,我们只需要两个简单的操作:

  • push:将元素添加到堆栈顶部。
    图像

  • pop:它从堆栈顶部移除一个元素。

图像

运营:

  • 添加 - 它会将元素添加到堆栈中,并增加堆栈的大小。添加操作发生在堆栈的顶部。
  • 删除操作包含两个条件:第一,如果栈中没有元素,则栈发生下溢;第二,如果栈中已有元素,则移除栈顶元素。删除操作可以减小栈的大小。
  • 遍历——它涉及访问栈中的每个元素。

特征:

  • 栈的插入顺序得以保留。

  • 有助于解析运算过程。

  • 允许重复。

# Implementation of stack using Python list.

x = ["Python", "C", "Android"]   
x.append("Java")   
x.append("C++")   
print(x)   
print(x.pop())   
print(x)   
print(x.pop())   
print(x) 
Enter fullscreen mode Exit fullscreen mode

输出:

['Python', 'C', 'Android', 'Java', 'C++']
C++
['Python', 'C', 'Android', 'Java']
Java
['Python', 'C', 'Android']
Enter fullscreen mode Exit fullscreen mode

2)队列

队列遵循先进先出(FIFO)原则。它两端都可打开,因此我们可以轻松地向队列末尾添加元素,也可以从队列开头移除元素

要实现队列,我们​​需要两个简单的操作:

  • 入队 - 它将一个元素添加到队列的末尾。
    图像

  • 出队 - 它将元素从队列的开头移除。

图像

队列操作

  • 添加- 它将元素添加到队列中,并且发生在队列的末尾,即队列的尾部。
  • 删除- 它包含两种情况 - 如果队列中没有元素,则队列发生下溢,或者如果栈中包含一些元素,则删除位于栈首的元素。
  • 遍历——它涉及访问队列中的每个元素。

特征:

  • 队列的插入顺序得以保留。
  • 允许重复。
  • 可用于解析 CPU 任务操作。
import queue   
# Queue is created as an object 'L'  
L = queue.Queue(maxsize=10)   

# Data is inserted in 'L' at the end using put()   
L.put(9)   
L.put(6)   
L.put(7)   
L.put(4)   
# get() takes data from   
# from the head    
# of the Queue   
print(L.get())   
print(L.get())   
print(L.get())   
print(L.get())  
Enter fullscreen mode Exit fullscreen mode

输出:

9
6
7
4
Enter fullscreen mode Exit fullscreen mode

使用案例:

1)堆栈。
想象一下,你是一名软件工程师,正在开发一款全新的文字处理器。你的任务是创建一个撤销功能——允许用户回溯到会话开始之前的操作。

非常适合这种场景。我们可以将用户执行的每个操作压入栈中来记录下来。当用户想要撤销某个操作时,只需将其从栈中弹出即可。我们
可以像这样快速模拟这个功能:

document_actions = Stack()

# The first enters the title of the document
document_actions.push('action: enter; text_id: 1; text: This is my favourite document')
# Next they center the text
document_actions.push('action: format; text_id: 1; alignment: center')
# As with most writers, the user is unhappy with the first draft and undoes the center alignment
document_actions.pop()
# The title is better on the left with bold font
document_actions.push('action: format; text_id: 1; style: bold')
Enter fullscreen mode Exit fullscreen mode

2)队列。

队列在编程中也有广泛的应用。想想《街头霸王》《任天堂明星大乱斗》这类游戏。玩家可以通过按下组合键来施展特殊招式。这些组合键可以存储在队列中。

现在想象一下,你是一名软件工程师,正在开发一款新的格斗游戏。在你的游戏中,每次按下按钮,都会触发一个输入事件。测试人员发现,如果按键速度过快,游戏只会处理第一个按键,特殊招式将无法生效!

你可以用队列来解决这个问题。我们可以把所有输入事件都入队。
这样,即使输入事件之间的时间间隔很短也没关系,它们都会被存储起来,随时可以进行处理。处理完这些移动后,我们可以把它们从队列中取出。
一个特殊的移动可以这样计算:

input_queue = Queue()

# The player wants to get the upper hand so pressing the right combination of buttons quickly
input_queue.enqueue('DOWN')
input_queue.enqueue('RIGHT')
input_queue.enqueue('B')

# Now we can process each item in the queue by dequeueing them
key_pressed = input_queue.dequeue() # 'DOWN'

# We'll probably change our player position
key_pressed = input_queue.dequeue() # 'RIGHT'

# We'll change the player's position again and keep track of a potential special move to perform
key_pressed = input_queue.dequeue() # 'B'

# This can do the act, but the game's logic will know to do the special move
Enter fullscreen mode Exit fullscreen mode

更多使用示例:

Python 中的栈数据结构

Python中的队列数据结构

如果您在文章中发现任何错误,或者有任何补充或建议,请随时留言、评论或在推特上私信我:https://twitter.com/HarunMbaabu

结论。

栈和队列是简单的数据结构,允许我们按顺序存储和检索数据。在栈中,最后放入的元素最先取出。在队列中,最先放入的元素最先取出。

我们可以使用 push 操作向栈中添加元素,使用 pop 操作从栈中取出元素。对于队列,我们​​使用 enqueue 操作向队列中添加元素,使用 dequeue 操作从队列中取出元素。

在 Python 中,我们可以直接使用内置的 List 数据结构来实现栈和队列。Python 还提供了 deque 库,它可以在一个对象中高效地实现栈和队列操作。最后,我们创建了自己的栈和队列类,以便更好地控制数据。

栈和队列在现实世界中有很多应用场景,理解它们能帮助我们以简单有效的方式解决许多数据存储问题。

文章来源:https://dev.to/grayhat/introduction-to-data-structs-and-algorithms-with-python-4ih1