Python数据结构-栈与深度优先搜索(Stack)

Python017

Python数据结构-栈与深度优先搜索(Stack),第1张

堆栈是算法和程序中最常用的辅助结构,其的应用十分广泛。堆栈基本应用于两个方面:

整数除法仅保留整数部分。

深度优先搜索算法(Depth First Search) :英文缩写为 DFS。是一种用于遍历或搜索树或图的算法。该算法沿着树的深度遍历树的节点,会尽可能深的搜索树的分支。当节点 v 的所在边都己被探寻过,搜索将 回溯 到发现节点 v 的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

在深度优先遍历的过程中,我们需要 将当前遍历节点 v 的相邻节点暂时存储起来 ,以便于在回退的时候可以继续访问它们。遍历到的节点顺序符合 「后进先出」 的特点,所以深度优先搜索可以通过 「递归」或者「堆栈」 来实现。

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

输入:(((()

输出:False

要求判别 {{{{[[[((()))]]]}}}}

中缀表达式 A + BA + B * C; (A + B) * C

前缀表达式 + AB + A * BC ; * +ABC

后缀表达式 AB + A B C * +; AB + C*

在中缀表达式中必须有的括号,在前缀和后缀表达式中消失了

思路

1 将中缀表达式转换为全括号的形式

2 将所有的操作符移动到子表达式所在的左括号(前缀)或者右括号(后缀)处,再删除其它所有的括号

5.1.1. 把列表当作堆栈使用

列表方法使得列表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:

>>>stack = [3, 4, 5]

>>>stack.append(6)

>>>stack.append(7)

>>>stack

[3, 4, 5, 6, 7]

>>>stack.pop()

7

>>>stack

[3, 4, 5, 6]

>>>stack.pop()

6

>>>stack.pop()

5

>>>stack

[3, 4]

“栈”

“队列”

是数据结构,与具体的语言无关。

1.队列先进先出,栈先进后出。

2.

对插入和删除操作的"限定"。

栈是限定只能在表的一端进行插入和删除操作的线性表。

队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。

从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"

的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。

3.遍历数据速度不同。栈只能从头部取数据

也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性队列怎不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多

栈(stack)是限定只能在表的一端进行插入和删除操作的线性表。

队列(queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。

从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。