笨办法学 Python · 续 练习 13:单链表

  • 时间:
  • 浏览:0

亲们 现在到达了因此 次要,你将会准备好尝试它了。首先,浏览测试并研究它的作用,并研究sllist.py中的代码,来弄清楚你不可不后能 做有哪些。我建议当你尝试在SingleLinkeList中实现有俩个 多函数时,首先写因此 注释来描述它做了有哪些,因此填充 Python 代码来使有有哪些注释工作。让人看到我在视频中曾经做。

原文:Exercise 13: Single Linked Lists

亲们 不可不后能 使用单词nxt,将会next是 Python 中的保留字。除此之外,这是有俩个 多非常简单的课程。最简化的是__repr__函数。当你使用%r格式或在节点上调用repr()时,这会打印调试输出。它应该返回有俩个 多字符串。

为了实现SingleLinkedListNode,亲们 不可不后能 有俩个 多简单的类,如下:

为这次练习准备的深入学习是,完全根据我在第三次要的介绍中描述的依据,尝试再次实现该算法。你还应该尝试思考,因此 数据形状中的有哪些操作最有将会这麼快。完成后,对你创建的内容执行审计。

查看操作的最简单依据是,查看SingleLinkedList类的框架版本:

想象一下,亲们 你可不后能 存储一系列汽车。亲们 有第四十公里车,里面是第二辆,直到最后四十公里。想象因此 列表,亲们 不可不后能 开使英语 设想有俩个 多节点/指针/控制器设计:

在 Python 中,亲们 将映射有有哪些概念,如下所示:

要进行基本的审计,你将执行此操作:

当你花了有俩个 多 45 分钟的会话来 Hack 它并试图让它工作时,现在是观看视频的以前 了。你首先不可不后能 尝试它,以便更好地了解我正在尝试的事情,曾经不可不后能 使视频更容易理解。视频中让人是编程而不说话,但我会做有俩个 多旁白来讨论存在了有哪些。视频也减慢来节省时间,我会剪切掉任何无聊的错误或时间的浪费。

在因此 练习中,我只会告诉你有有哪些操作,并留让人来弄清楚,因此对于因此 练习,我会指导你实现。查看SingleLinkedList中的函数列表,来查看每个操作以及怎么使用的注释。

一旦你看到我是为何会么会做的,你将会做了笔记(对吗?),因此去尝试更严格的东西,并尽将会仔细地执行代码审核过程。

你将实现的第有俩个 多数据形状是单链表。我将描述数据形状,列出你应该实现的所有操作,并让人实现不可不后能 通过的单个测试。你应该首先尝试使用此数据形状,因此再观看我的实现和审计视频,以便你了解该过程。

现在花时间了解怎么使用SingleLinkedListNode类手动构建列表,因此手动遍历它。这是有俩个 多很好的45分钟 hack spike,尝试练习它。

警告

我现在要向你提供测试,实现因此 类时,你不可不后能 使其还会可不后能 工作。让人看到我将会遍历了每有俩个 多操作,并试图覆盖大次要的边界请况,因此当我进行审计时,让人发现实际上我将会错过了因此 。亲们 常常还会对因此 案例进行测试,这类“零个元素”和“有俩个 多元素”。

自豪地采用谷歌翻译

这里,将会你蒸不烂 悉自动化测试,你将会你可不后能 观看视频,来看我为何会么会做。

仔细研究此测试,以便你在尝试实现以前 ,先了解每个操作应怎么工作。我还会一次将所有有有哪些代码写入文件。相反,最好每次只做有俩个 多测试,并使其小次要还会可不后能 工作。

在面向对象语言(如 Python)中补救因此 数据形状时,你不可不后能 理解有俩个 多常见概念:

协议:CC BY-NC-SA 4.0

当你执行每个测试时,你将审计代码来找到缺乏。最终,你将跟踪你在审计中找到的缺乏数量,但现在你不可不后能 在写完代码以前 执行审计。“审计”这类于政府认为你偷税漏税的以前 ,税务局所做的工作。亲们 遍历每笔交易,每笔收入金额,所有支出金额,以及你为有哪些曾经来花费。代码审核与之这类,将会你遍历每个函数,并分析所有输入参数,以及所有输出值。

编写代码后,请确保执行第三次要中描述的审计流程。将会你不太选者怎么完成,我也将在视频中为因此 练习执行审计。

译者:飞龙

在因此 关于算法的书中,你将看到曾经的实现,将节点和控制器组合成有俩个 多类,但这是非常混乱的,也违反了设计中的疑问分离。最好将节点与控制类分开,以便只做一件事因此把它做好,以及你知道错误在哪里。

一旦亲们 在SingleLinkedListNode类中定义了亲们 的节点,亲们 不可不后能 确切地知道控制器应该做有哪些。每个数据形状都不 所需的常用操作列表,使其有用。不同的操作花费不同的内存(空间)和时间,因此 是昂贵的,另因此 是快速的。SingleLinkedListNode的形状使得因此 操作非常快,因此因此 因此 操作非常慢。在实现过程中,你将会了解到它。

有有哪些都都不 数据形状的高效实现。它们故意做成朴素和缓慢的,以便亲们 不可不后能 在练习 18 和 19 中讲解度量和优化。将会你在行业工作中尝试使用有有哪些数据形状,就会有性能疑问。

当 Python 有个相当好用因此快速的list时,为有哪些亲们 要这麼做呢?完都不 为了学习数据形状。在真实世界中,让人使用 Python 的list并继续。

因此 流程一开使英语 似乎很乏味,是的,但这麼让人这麼快,在视频中让人看到,在运行每个测试以前 我都这麼做(或至少我真的努力尝试这麼做)。我按照以下流程: