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

  • 时间:
  • 浏览:2

当你花了另一另另八个 45 分钟的会话来 Hack 它并试图让它工作时,现在是观看视频的就让了。你首先须要尝试它,以便更好地了解我正在尝试的事情,原先还须要使视频更容易理解。视频中我就让 编程而不说话,但我会做另一另另八个旁白来讨论存在了什么。视频也更快来节省时间,我会剪切掉任何无聊的错误或时间的浪费。

协议:CC BY-NC-SA 4.0

我现在要向你提供测试,实现这名 类时,你须要使其都可不都可以 工作。给你就看我否则遍历了每另一另另八个操作,并试图覆盖大要素的边界情况汇报,否则当我进行审计时,给你发现实际上我否则错过了一点。亲戚亲戚朋友常常不必对一点案例进行测试,类似“零个元素”和“另一另另八个元素”。

现在花时间了解何如使用SingleLinkedListNode类手动构建列表,否则手动遍历它。这是另一另另八个很好的45分钟 hack spike,尝试练习它。

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

在 Python 中,亲戚亲戚朋友将映射什么概念,如下所示:

仔细研究此测试,以便你在尝试实现就让,先了解每个操作应何如工作。我不必一次将所有什么代码写入文件。相反,最好每次只做另一另另八个测试,并使其小要素都可不都可以 工作。

你将实现的第另一另另八个数据特性是单链表。我将描述数据特性,列出你应该实现的所有操作,并给你实现须要通过的单个测试。你应该首先尝试使用此数据特性,否则再观看我的实现和审计视频,以便你了解该过程。

这名 流程一就让开始英文英文英文 似乎很乏味,是的,但在等给你那末快,在视频中给你就看,在运行每个测试就让我都那末做(或至少我真的努力尝试那末做)。我按照以下流程:

什么都也有数据特性的高效实现。它们故意做成朴素和缓慢的,以便亲戚亲戚朋友还须要在练习 18 和 19 中讲解度量和优化。否则你在行业工作中尝试使用什么数据特性,就会有性能间题。

想象一下,亲戚亲戚朋友我应该 存储一系列汽车。亲戚亲戚朋友有第为社 算油耗车,后面 是第二辆,直到最后为社 算油耗。想象这名 列表,亲戚亲戚朋友还须要就让开始英文英文英文 设想另一另另八个节点/指针/控制器设计:

在一点关于算法的书中,你将就看原先的实现,将节点和控制器组合成另一另另八个类,但这是非常混乱的,也违反了设计中的间题分离。最好将节点与控制类分开,以便只做一件事否则把它做好,以及你知道错误在哪里。

查看操作的最简单法律办法是,查看SingleLinkedList类的框架版本:

这里,否则你不熟悉自动化测试,你否则我应该 观看视频,来看我为社 么做。

编写代码后,请确保执行第三要素中描述的审计流程。否则你不太选取何如完成,我也将在视频中为这名 练习执行审计。

为这次练习准备的深入学习是,全部根据我在第三要素的介绍中描述的法律办法,尝试再次实现该算法。你还应该尝试思考,这名 数据特性中的什么操作最有否则很慢。完成后,对你创建的内容执行审计。

在一点练习中,我只会告诉你什么操作,并留给你来弄清楚,否则对于这名 练习,我会指导你实现。查看SingleLinkedList中的函数列表,来查看每个操作以及何如使用的注释。

原文:Exercise 13: Single Linked Lists

警告

亲戚亲戚朋友须要使用单词nxt,否则next是 Python 中的保留字。除此之外,这是另一另另八个非常简单的课程。最简化的是__repr__函数。当你使用%r格式或在节点上调用repr()时,这会打印调试输出。它应该返回另一另另八个字符串。

当你执行每个测试时,你将审计代码来找到过高 。最终,你将跟踪你在审计中找到的过高 数量,但现在你须要在写完代码就让执行审计。“审计”类似政府认为你偷税漏税的就让,税务局所做的工作。亲戚亲戚朋友遍历每笔交易,每笔收入金额,所有支出金额,以及你为社 么原先来花费。代码审核与之类似,否则你遍历每个函数,并分析所有输入参数,以及所有输出值。

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

当 Python 有个相当好用否则快速的list时,为社 么亲戚亲戚朋友要那末做呢?完也有为了学习数据特性。在真实世界中,给你使用 Python 的list并继续。

自豪地采用谷歌翻译

译者:飞龙

一旦亲戚亲戚朋友在SingleLinkedListNode类中定义了亲戚亲戚朋友的节点,亲戚亲戚朋友还须要确切地知道控制器应该做什么。每个数据特性也有所需的常用操作列表,使其有用。不同的操作花费不同的内存(空间)和时间,一点是昂贵的,另一点是快速的。SingleLinkedListNode的特性使得一点操作非常快,否则一点一点操作非常慢。在实现过程中,你否则了解到它。

在面向对象语言(如 Python)中防止一点数据特性时,你须要理解另一另另八个常见概念:

为了实现SingleLinkedListNode,亲戚亲戚朋友须要另一另另八个简单的类,如下:

亲戚亲戚朋友现在到达了这名 要素,你否则准备好尝试它了。首先,浏览测试并研究它的作用,并研究sllist.py中的代码,来弄清楚你须要做什么。我建议当你尝试在SingleLinkeList中实现另一另另八个函数时,首先写一点注释来描述它做了什么,否则填充 Python 代码来使什么注释工作。给你就看我在视频中原先做。