Python数据结构与算法入门。
Python中的数据结构和算法是计算机科学中最基本的两个概念,也是任何程序员不可或缺的工具。
Python 中的数据结构负责在程序处理数据时,如何组织和存储内存中的数据。而Python 算法则指的是一套详细的指令,用于帮助程序处理数据以达到特定目的。
数据结构用于组织计算机中的存储,以便我们能够轻松访问和更改数据。
栈和队列是计算机科学中最早定义的数据结构。一个简单的 Python 列表可以充当队列和栈,我们也可以使用类和函数来实现栈和队列,今天我们将探讨这两种方法。
队列遵循先进先出( FIFO)规则,在编程中用于排序。栈和队列通常用数组或链表来实现。
1)堆栈。
栈是一种遵循后进先出(LIFO)原则的数据结构。要实现一个栈,我们只需要两个简单的操作:
运营:
- 添加 - 它会将元素添加到堆栈中,并增加堆栈的大小。添加操作发生在堆栈的顶部。
- 删除操作包含两个条件:第一,如果栈中没有元素,则栈发生下溢;第二,如果栈中已有元素,则移除栈顶元素。删除操作可以减小栈的大小。
- 遍历——它涉及访问栈中的每个元素。
特征:
-
栈的插入顺序得以保留。
-
有助于解析运算过程。
-
允许重复。
# 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)
输出:
['Python', 'C', 'Android', 'Java', 'C++']
C++
['Python', 'C', 'Android', 'Java']
Java
['Python', 'C', 'Android']
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())
输出:
9
6
7
4
使用案例:
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')
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
更多使用示例:
如果您在文章中发现任何错误,或者有任何补充或建议,请随时留言、评论或在推特上私信我: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





