数据结构与算法
文章平均质量分 87
学无止境
学迁
主要使用语言:python+rust
以后会往这两个语言应用的一些方向更新。
展开
-
Python数据结构与算法_11_递归
递归函数,函数调用栈,栈桢,递归栈,函数递归调用,递归的实质,递归的本质原创 2023-03-04 16:03:40 · 1329 阅读 · 0 评论 -
Python数据结构与算法_10_双向链表
前情提要:Python数据结构与算法_8_链表、无序链表前情提要:Python数据结构与算法_9_有序链表什么是双向链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。——《百度百科对于双向链表的解释》双向链表是在单向链表的基础上扩展而成的更为复杂的数据结构,双向链表其中的每个节点除了含有自身数据元素之外,还含有两个链接(以prev与next为例),分别指向它的上一个节原创 2022-03-12 19:25:45 · 1752 阅读 · 2 评论 -
Python数据结构与算法_9_有序链表
前情提要:Python数据结构与算法_8_链表、无序链表接下来我们研究有序链表。什么是有序链表如果给定一个链表,他的节点数据元素都是的整数,如77, 26, 31, 93, 17, 54。如果这些链表里的节点是以升序排列的有序链表,那么它会被写作17, 26, 31, 54, 77, 93。由于 17 是最小的元素,因此它就成了链表的第一个元素(视为节点)。同理,由于 93 是最大的元素,因此它就会在链表的最后一个位置。在有序链表中,元素的相对位置取决于它们的基本特征。它们通常以升序或者降序排列,原创 2022-03-12 11:24:19 · 1947 阅读 · 0 评论 -
Python数据结构与算法_8_链表、无序链表
链表是一系列元素的集合,这些元素的内存是散乱的。无序链表则是一系列逻辑无序元素的集合,只是通过链表数据结构连接起来。虽然这些元素整体来看是散乱的,但其中每一个元素都有一个相对于其他元素的位置信息。所以链表需要维持元素之间的相对位置,但是也不需要特意在一段内存空间中存储这些位置信息。以下图中的元素集合为例,这些元素的位置看上去都是随机的。如果可以为每一个元素附加一份信息,即下一个元素的位置,那么这些元素的相对位置就能通过自身指向下一个元素的链接来表示。附加信息后则可表示为:需要注意的是,使用链表时原创 2022-03-08 18:13:58 · 764 阅读 · 0 评论 -
Python数据结构与算法_7_双端队列
什么是双端队列双端队列是与队列类似的有序集合。它有一前、一后两端,元素在其中保持自己的位置。与队列不同的是,双端队列对在哪一端添加和移除元素没有任何限制。新元素既可以被添加到前端,也可以被添加到后端。同理,已有的元素也能从任意一端移除。某种意义上,双端队列可以是栈和队列的结合。值得注意的是,尽管双端队列有栈和队列的很多特性,但是它并不要求按照这两种数据结构分别规定的LIFO原则和FIFO原则操作元素。具体的排序原则取决于其使用者。双端队列抽象数据类型由下面的结构和操作定义。如前所述,双端队列原创 2022-03-07 19:47:10 · 461 阅读 · 0 评论 -
Python数据结构与算法_6_队列_强化提升
前情提要:Python数据结构与算法_4_队列_基础知识前情提要:Python数据结构与算法_5_队列_知识巩固模拟打印机任务队列过程计算机科学中也有众多的队列例子。比如计算机实验室有10台计算机,它们都与同一台打印机相连。当学生需要打印的时候,他们的打印任务会进入一个队列。该队列中的第一个任务就是即将执行的打印任务。如果一个任务排在队列的最后面,那么它必须等到所有前面的任务都执行完毕后才能执行。学生向共享打印机发送打印请求,这些打印任务被存在一个队列中,并且按照先到先得的顺序执行。这样的设定原创 2022-03-07 19:45:26 · 451 阅读 · 0 评论 -
Python数据结构与算法_5_队列_知识巩固
前情提要:Python数据结构与算法_4_队列_基础知识接下来我们深入学习队列的实际用法。传土豆队列的一个典型方法是模拟需要以 FIFO 方式管理数据的真实场景。考虑这样一个游戏:传土豆。在这个游戏中,成员们围成一圈,并依次尽可能快地传递一个土豆。在某个时刻,大家停止传递,此时手里有土豆的成员就得退出游戏。 重复上述过程,直到只剩下一个成员。我们将针对传土豆游戏实现通用的模拟程序。该程序接受一个名字列表和一个用于计数的常量 num ,并且返回最后剩下的那个人的名字。我们使用队列来模拟一个环原创 2022-03-06 19:00:01 · 3829 阅读 · 2 评论 -
Python数据结构与算法_4_队列_基础知识
什么是队列?队列,与栈类似,是有序集合。添加操作发生在 “尾部”,移除操作只发生在 “头部”。新元素只从尾部进入队列,然后一直向前移动到头部,直到成为下一个被移除的元素。最新添加的元素必须在队列的尾部等待,在队列中时间最长的元素则排在最前面。这种排序原则被称作FIFO(first-in first-out),即先进先出,也称先到先得。在日常生活中,我们经常排队,这便是最简单的队列例子。进电影院要排队,在超市结账要排队,买咖啡也要排队。好的队列只允许一头进,另一头出,不可能发生插队或者中途离开的情况。原创 2022-03-06 15:07:51 · 379 阅读 · 0 评论 -
Python数据结构与算法_3_栈_强化提升
前情提要:Python数据结构与算法_1_栈_基础知识前情提要:Python数据结构与算法_2_栈_知识巩固前序、中序和后序表达式是什么?对于像 B∗CB*CB∗C 这样的算术表达式,可以根据其形式来正确地运算。在 B∗CB*CB∗C 的例子中,由于乘号出现在两个变量之间,因此我们知道应该用变量 B 乘以变量 C 。因为运算符出现在两个操作数的中间 ,所以这种表达式被称作中序表达式 。来看另一个中序表达式的例子:A+B∗CA + B * CA+B∗C。虽然运算符 “ + ” 和 “ *原创 2022-03-05 14:33:26 · 613 阅读 · 0 评论 -
Python数据结构与算法_2_栈_知识巩固
前情提要: Python数据结构与算法_1_栈_基础知识匹配括号接下来,我们使用栈解决实际的计算机科学问题。比如我们都写过这样所示的算术表达式,(5+6)∗(7+8)/(4+3)(5 + 6) * (7 + 8) / (4 + 3)(5+6)∗(7+8)/(4+3),其中的括号用来改变计算顺序,或提升运算优先级。匹配括号是指每 一个左括号都有与之对应的一个右括号,并且括号对有正确的嵌套关系。正确的嵌套关系:(()()()())(()()()())(()()()())、(((())))(原创 2022-03-04 09:24:06 · 433 阅读 · 0 评论 -
Python数据结构与算法_1_栈_基础知识
什么是栈栈有时也被称作“下推栈”。它是有序集合,添加操作和移除操作总发生在同一端,即栈的 “顶端”,栈的另一端则被称为 “底端”。所以最新添加的元素将被最先移除,而且栈中的元素离底端越近,代表其在栈中的时间越长。这种排序原则被称作LIFO(last-in first-out),即后进先出。它提供了一种基于在集合中的时间来排序的方式。 最近添加的元素靠近顶端,旧元素则靠近底端。栈的例子在日常生活中比比皆是。几乎所有咖啡馆都有一个由托盘或盘子构成的栈,你可以从顶部取走一个,下一 个顾客则会取走下面的托盘或原创 2022-03-03 12:39:13 · 239 阅读 · 0 评论