用链表的目的是什么_省空间还是省时间_-invalid s
这是一个典型的错误思考方向。
错误的根源在于,你把链表当成了一种整体的、不可分割不可更改的完整概念——然后,就着这个概念,考虑它的用途它的优点它的弱点,总结出一二三四然后背诵……完了。
完蛋。
这叫买椟还珠。
实际上,讲链表是为了给你引出“借助后向指针(next)组织数据”这么一个设计思路;同时借助这个思路完成一个典型的应用案例、学着分析它的空间/时间复杂度……
然后,马上领着你变换它、变形它、改进它……
比如,加上一个前向的prev指针,把单向链表改成双向链表;或者把next指针去掉、换成left/right指针,把它改成二叉树,等等。
这个过程中,真正想教给你的,是因地制宜的定制各种数据结构、分析其时空复杂度,为自己未来设计自己的算法/数据结构铺路。
因此,不要问“用链表的目的是什么”,而是反过来问:“链表是为了解决什么问题而发明的”、“有没有更优方案”、“如何找出更优方案”、“如何证明方案更优”……终至于“当我遇到某个没有先例的难题时,该如何优雅的解决它?”
当你这样问时,问题就很简单了。
1、链表是为了解决什么问题而发明的?
为了解决动态数量的数据存储。
比如说,我们要管理一堆票据,可能有一张,但也可能有一亿张。
怎么办呢?申请50G的大数组等着?万一用户只有一百张票据要处理呢?内存小于64G拒绝运行?可申请少了又不够用啊……
而且,用数组的话,删除然后添加票据,是每次删除让后面五百万张往前移一格呢、还是每次添加从头搜索空闲格子?如何区分空闲格子和值为0的数据?搞区分的话是多占用空间呢还是占用数据值域?占用了值域会不会使得数据处理变得格外复杂?会不会一不小心就和正常数据混淆?万一拿来区分的字段在某个版本后废弃不用、或者扩充值域了呢?
你看,满是棘手的问题。
那么,链表这种东西就是个很有效的数据结构,可以很有效的管理这类不定量的数据。
2、有没有更优方案?
有。
时间上,链表无法支持搜索,想找到特定数据只能遍历。
空间上,链表每个数据要额外占用一个指针的空间;对于int等基本数据类型,数据量暴增一倍(单链表)甚至两倍。
那么,为了在时间上优化它,我们可以搞成二叉树;然后通过先序/后序/中序遍历取得按一定规律排布的数据;也可以通过和根节点比较来快速确定数据在排序二叉树的左还是右子树上——这就得到了O(logN)的查询效率。
但“随随便便插入数据”的二叉树很可能“偏”的非常厉害;极端情况下就退化成了空间消耗更高但效率没有丝毫提升的链表(绝大多数的左或右指针空着)。因此我们需要研究怎么样的二叉树才能有最好的查询效率、怎样才能保持二叉树的良好性能——于是就有了满二叉树、平衡树、红黑树等概念/算法。
但这样空间占用就比单链表更多了。怎么办呢?
堆是一种优化到极致的二叉树;它实际上就是一个数组,左右节点对应的数组下标可以直接计算出来——这就省掉了指向子节点的指针。
不过,指针没了,灵活管理不定量数据、低消耗的插入删除等好处也没了。
灵活管理不定量数据这个需求容易满足:我们把数组分成若干段、然后调整一下计算出来的下标就行了。
比如,数组1一共256个元素,用满后不得不又申请了一个1024元素的数组2;那么对于下标1000,我们就不能访问数组1下标1000的元素,而应该去数组2查找;并且在数组2中,它的下标应该是1000-256——你看,一旦内部做了这样一个自动调整,我们就又把“按需申请空间”能力找回来了。
只不过,这个方案里,插入/删除会变得特别麻烦——堆排序本身已经够烧脑了,结果算出来的下标还要根据配置截成很多段、还要在每段里重新计算……
即便这个算法我们可以轻易hold住,但每次插入/删除造成海量元素位置移动,这个消耗也太可怕了——O(N)的消耗!
另一个折衷方案就是B树(以及B+树)——说白了,把节点做大一些,多存储一些数据,换句话说就是“让若干数据共用一组指针”、或者说是一种“半堆半树/堆树结合”的数据结构:用更少的指针得到差不多的性能,这就把空间占用问题和高消耗的插入删除问题给解决了,同时查找效率仍然保持在O(log N)。
顺带的,这也避免了需要连续读取数据时不停的顺着指针跳转的问题,因此是一种非常适合磁盘存储的数据结构。
所以你说“用链表的目的是什么”?
没目的。
或者说,目的是让你学会因地制宜的、灵活的组织数据——而且随便你搞出多么奇怪的数据结构、多么复杂的数据组织形式,你都能清晰的给出它(对某个特定任务)的时间/空间复杂度。
当你能掌握到这个程度时,你完全可以把完全二叉树、满二叉树、红黑树、B树、B+树的定义统统忘掉;但只要有需要,你随时随地都能把你面对的数据整进一个结合了二叉树和队列优点的、不知道该叫什么的数据结构里——从而以最高效率完成你面对的任务。
换句话说,不要浮在表面、只看到链表二叉树之类东西;而是要深入进去,把它们统统拆散了、揉碎了、忘记了——你要做它们的发明者,不要做它们的使用者。
你要学的,是最高效率把玩海量数据的思路;你不仅要能因地制宜的给出解决方案、还要有能力给出综合最优的方案(并作出证明)——停留在链表这个表面上,那是连门在哪都没摸到,谈何入门。
拿程序设计语言的术语来说,链表的定义并不是final class List
可以说,本科的算法与数据结构这本书,其中一大半的篇幅都在教这个改进过程/思路——只不过绝大多数的师生乃至写教材的老师都没意识到这点,反而习惯性的分章节摘开、把明显具有演进关系的概念割裂成一个个final class讲解/学习,再加上考试指挥棒的作用,这才使得绝大多数人被误导到了错误的方向。
评论区
任乾: 醍醐灌顶[赞][赞][赞] 👍🏽328 💭N/A IP 🕐2021-06-08 10:33:57
│ └── 张小抽: 是的,我一直不明白的问题几句给我讲明白了 👍🏽11 💭N/A IP 🕐2021-06-08 12:41:07
│ └── 知乎用户RPuOpr: 竟然看懂了! 👍🏽0 💭N/A IP 🕐2021-06-12 13:11:51
│ └── imseon: [大哭]我点开评论就是为了写这四个字,结果一点开第一条就是你,害我生生给憋回去了 👍🏽57 💭N/A IP 🕐2021-06-17 10:07:20
│ │ └── 知乎用户vdE3BJ: 鹈鹕灌顶[赞][赞] 👍🏽0 💭N/A IP 🕐2022-12-04 16:17:51
│ └── 思想的光芒: 大家都是会员,帮个忙删了这条让我发[doge] 👍🏽0 💭N/A IP 🕐2022-04-23 23:05:43
Farruca: 国内理工科经典教学法,从天而降一个链表,用就完事了,别想前因后果。 👍🏽270 💭N/A IP 🕐2021-06-10 15:43:01
│ └── 海竹: 不仅仅是链表,是所有课程不是这样。上来就是一个公式,背就完了。我是看了斯坦福大学的线性代数之后,才明白原来线性代数这么有意思,背后的逻辑这么好玩,原来我不懂的那些公式不是我的问题,至少,不全是我的问题 👍🏽153 💭N/A IP 🕐2021-06-10 18:40:09
│ │ └── MelindaSssss: 我也是 看了 忘了是麻省还是哪个学校的线代课 我才知道 原来线代是为了解决各种线性结构的问题 在此之前一直不懂画那些框框叉叉究竟用来干啥 👍🏽2 💭N/A IP 🕐2022-07-01 16:01:53
│ │ └── 今天没吃早餐: 真正优质的回答,我的天,要是我本科时候看到这个答案,何愁被他娘的各种指针绕晕啊 👍🏽0 💭N/A IP 🕐2022-08-21 10:50:33
│ │ └── 池鱼: 和斯坦福比,你怎么不拿自己和马云比 👍🏽0 💭N/A IP 🕐2024-12-07 17:40:43
│ │ └── 海竹: 蛤?蛤蛤?? 👍🏽0 💭N/A IP 🕐2024-12-07 19:56:50
│ │ └── 海竹: 所以我们就是臭鱼烂虾,不配好的教育? 👍🏽1 💭N/A IP 🕐2024-12-07 19:57:24
│ └── 不曾消逝的海: 从天而降这个词用的好啊 👍🏽33 💭N/A IP 🕐2021-06-16 00:56:01
│ │ └── 知乎用户BYK5Tg: 横空出世感觉也行[惊喜] 👍🏽0 💭N/A IP 🕐2022-09-02 08:09:57
│ └── 我没有那么多彩: 国内的教学难道不是从定义开始教再到让学生按照例子编写吗?定义中就包含链表的很多特性,自己再按照例子写代码的话就会理解更深刻了,比如物理地址不连续特点等。 👍🏽3 💭N/A IP 🕐2021-07-23 08:29:32
│ │ └── Gentlerx: 只能说国内的教材适合当工具书?快速入门有更好的选择 👍🏽0 💭N/A IP 🕐2022-09-01 23:19:25
│ └── JellyfishMIX: 用来做题[吃瓜] 👍🏽3 💭N/A IP 🕐2021-07-31 00:41:32
│ └── 知乎用户CQHfUL: 我只管教你只管学,没那么多为什么[doge] 👍🏽1 💭N/A IP 🕐2021-08-15 20:50:34
│ └── shelter: 跟动规一样,讲解完全应试,糟蹋了这么美好的东西 👍🏽6 💭N/A IP 🕐2021-09-01 19:44:49
│ │ └── 眉妩: 有什么地方可以学习动归吗,求推荐 👍🏽1 💭N/A IP 🕐2021-12-11 22:20:29
│ └── 这什么神仙操作: 当年的汇编课,老师讲了半个学期的指令,硬是没讲过一个完整的汇编程序是如何运行的。最后自己找了一本国外教材一看就懂了。 👍🏽2 💭N/A IP 🕐2022-09-06 12:38:04
│ └── 西伯戡黎: 不能叫天降吧,那不然从哪教起。链表已经属于那种在理解指针以后许多人能够自行设计出来的数据结构。 👍🏽0 💭N/A IP 🕐2023-04-13 22:21:11
│ └── 明月: 国内书籍是堆知识,无前因后果,难以串起来 👍🏽3 💭N/A IP 🕐2024-12-08 19:52:45
│ └── 无常真人: 甚至堆知识都已经算不错的了。我们三本的教材,全都是总结性归纳性的段落,把优点列出来就完事了,连这个东西到底是啥都没介绍清楚,直接列出一大堆优点和特性。段落里还有很多陌生的术语,本来要解释A的,结果来了更难懂的B和C,莫名其妙。 👍🏽1 💭N/A IP 🕐2024-12-13 14:01:15
并非如此: 你的答案非常棒, 不过我觉得你还是应该鼓励一下题主, 在我看来题主是在认真思考链表背后设计的意图, 只是问题提的不够专业, 不过大方向还是对的, 因此才引出了你这样优秀的答案[大笑], 所以对初学者还是鼓励为佳。 同时为你认真答题点赞, 不是每个人都这么有耐心的。 👍🏽89 💭N/A IP 🕐2021-06-09 19:13:23
│ └── invalid s: 溜须未必有你想象的重要。 👍🏽8 💭N/A IP 🕐2021-06-09 19:24:59
│ │ └── 可门: 对小白的一句鼓励,当初根据答主的想法可以给与不给,本身也无关紧要。不过那样就是溜须了吗? 👍🏽2 💭N/A IP 🕐2021-06-18 14:27:00
│ │ │ └── 夜隐: 很多时候鼓励不鼓励都一样,最重要的是你想不想学,要不要学会,太多形式过场只会影响效率 👍🏽11 💭N/A IP 🕐2021-06-23 10:54:07
│ │ │ └── daks: 哪怕答主狠狠地骂我,我也会哭着看完这篇,因为写的确实透彻[大哭] 👍🏽4 💭N/A IP 🕐2022-11-03 11:04:19
│ │ └── Mystic: 有人总觉得中庸的一片和谐状态最好。你夸我我夸你,虚假和谐。我觉得答主语气不过分,恃才傲物很正常。 👍🏽8 💭N/A IP 🕐2021-07-02 10:13:22
│ │ └── invalid s: 谁傲了?正常说两句话,他们自己看不懂,玻璃心犯了,就一定要过来侵害别人正常说话的权利……这种玩意儿哪存在和谐。对他们来说,要不是手中权力不够,不然连中学课本都得改这味:——小主您好!今天奴婢给您讲牛顿第一运动定律……——啊,是是。牛顿太狂妄了,第一不是他们这些卑贱的科学家有资格用的。删了,马上删。那奴婢告退了,等新物理课本下来再来求您听课……——小主您好!今天的内容是牛顿最末运动……啊,那个妄言。是的,服从其它小主的指示,定律太狂妄了,改名叫妄言了……那个惯性妄言的内容……啊,是,遵从指示,倦了就不讲了……是是,自己掌嘴!怎么能叫讲呢……要我说啊,太监制被取消实在太遗憾了。不然所有这些小主脾气的,阉了通通都是个好太监。 👍🏽36 💭N/A IP 🕐2021-07-02 11:07:08
│ └── 蔡磊: 我觉得这个事是这样的,人类认知这个世界的过程都是在瞎子摸象,每个人限于自己的出身环境、成长经历、先天智商、后天学习等等,摸的角度和结果都不尽相同,只有大家分享自己的领悟,多看看别人的观点,才能逐渐补全自己对整个全貌的认知。像楼主这样一看就是分享了自己数年积累下来的精华领悟的,看到的人难道不应该欣喜若狂?难道不应该感激?智者已经喜不自胜的把宝珠抱回家了,只有愚者才会因为装宝珠的盒子不够华丽而一跺脚转身骂骂咧咧的走了。那么答主为什么要去迎合这些愚者的喜好,把一个根本无足轻重的盒子做的华丽无比呢?他们不爱看,不看就好了,谁也没有这个义务要为他们那膨胀的ego买单。 👍🏽14 💭N/A IP 🕐2021-11-16 09:09:36
│ └── 吴逸司: 作者负债解惑,而你去鼓励题主大家分工合作一团和谐,以后题主开花结果功劳也有你一半的[滑稽] 👍🏽1 💭N/A IP 🕐2022-01-28 09:16:29
│ └── 羽毛: 所谓情商 是指的你看出对方智商水平后 主动降低自己的水平与对方更好的交流还需磨练 👍🏽3 💭N/A IP 🕐2022-08-22 10:49:15
│ └── Alicandra: 所谓的情商,就是看出对方是个弱智之后闭嘴并允许他一直蠢下去。 👍🏽4 💭N/A IP 🕐2022-08-30 23:28:04
伯纳乌夜空的星: 真想听你串讲下数据结构,真是醍醐灌顶啊 👍🏽33 💭N/A IP 🕐2021-06-09 15:40:46
│ └── 易悦賀: 我也是,就是不知道答主开不开频道 👍🏽0 💭N/A IP 🕐2022-12-01 08:39:57
cryingdevil: 想起了风清扬教令狐冲剑法[赞] 👍🏽31 💭N/A IP 🕐2021-06-08 09:00:26
│ └── 国子监祭酒囧卿: “唉,蠢才,蠢才!无怪你是岳不群的弟子,拘泥不化,不知变通。剑术之道,讲究如行云流水,任意所之。你使完那招‘白虹贯日’,剑尖向上,难道不会顺势拖下来吗?剑招中虽没这等姿式,难道你不会别出心裁,随手配合么?”[doge] 👍🏽0 💭N/A IP 🕐2024-12-07 15:05:57
Dtdmmas: 确实是啊,答主可以 👍🏽28 💭N/A IP 🕐2021-06-08 02:43:58
弹星者: 答主考虑开课讲数据结构吗[飙泪笑]如果有意愿我肯定付费去听[赞同] 👍🏽27 💭N/A IP 🕐2021-06-10 14:51:03
│ └── invalid s: 有空了可能考虑…… 👍🏽24 💭N/A IP 🕐2021-06-10 18:10:47
│ │ └── 弹星者: 赞![赞同] 👍🏽0 💭N/A IP 🕐2021-06-10 18:44:57
│ │ └── 今夜还吹着风: +1,我也想看下答主讲的数据结构,文章看着很解气。[赞同] 👍🏽5 💭N/A IP 🕐2021-06-28 10:21:20
│ │ └── 懿笏: [蹲]等了半年了,答主考虑讲数据结构了吗,课本讲的太散了。 👍🏽0 💭N/A IP 🕐2022-01-17 13:26:20
│ │ └── 小冰河: 有空了吗哥哥 👍🏽0 💭N/A IP 🕐2022-01-18 23:14:30
│ │ └── daks: 有空了吗哥哥 👍🏽0 💭N/A IP 🕐2022-11-03 11:05:47
│ │ └── 彼可守: 有空了吗 👍🏽0 💭N/A IP 🕐2023-04-27 11:03:09
│ │ └── master: 有空了吗哥[爱] 👍🏽0 💭N/A IP 🕐2023-11-06 22:19:18
│ └── mancoi: 真想听 👍🏽0 💭N/A IP 🕐2022-03-20 21:52:24
│ └── 易悦賀: 我也愿意付费 👍🏽0 💭N/A IP 🕐2022-12-01 08:40:17
│ └── 庄生: 有空了吗哥哥 👍🏽0 💭N/A IP 🕐2023-11-15 10:33:15
蜉蝣: 为了应付考试或者被动学习数据结构的人才会感觉醍醐灌顶,主动想要了解的人在学习之初就会有为什么要学习这个东西,这个东西能带给我们什么,它是因为什么才被发明出来的。归根结底是主动或者被动的问题,只有真正喜欢这门学科,才能对问题的产生追根溯源,这种思维才是搞懂问题的关键。楼主的回答很棒,很多LeetCode刷题手都具备这种思维方式,侧面印证了思维方式对人类创造力的影响是多么巨大啊。 👍🏽23 💭N/A IP 🕐2021-08-13 23:02:53
王德福: 链表到底是为了解决什么问题而发明的?用链表的目的又是什么?_哔哩哔哩_bilibili 此答案被抄袭 👍🏽17 💭N/A IP 🕐2022-07-12 07:22:27
│ └── invalid s: 嗯,多谢了。正在投诉中。 👍🏽9 💭N/A IP 🕐2022-07-12 11:49:40
│ └── Cary.Z: 连热评都偷过去了🤣 👍🏽2 💭N/A IP 🕐2024-12-11 10:19:39
霍华德: 妙不可言[爱] 👍🏽11 💭N/A IP 🕐2021-06-15 01:52:22
│ └── we1K1N: 我发现了什么 👍🏽0 💭N/A IP 🕐2021-06-15 02:17:46
NULL: 链表用来干嘛和链表是用来解决什么问题而发明的。这两个不是一个意思吗? 👍🏽11 💭N/A IP 🕐2021-06-08 10:04:52
│ └── 废物点心的自我救: 前者是以目的为导向,后者以问题为导向 👍🏽31 💭N/A IP 🕐2021-06-08 10:33:48
│ └── dream: 前者是在背概念后者是在拷问本质 👍🏽6 💭N/A IP 🕐2021-06-08 11:14:07
│ └── invalid s: 前者是 final class LinkTable<T>,后者是absolute class LinkTable<T>——前者是“这是一个现成的完美品”“用就对了别管它怎么实现也别试图改进它”;后者是“这并不是一个完美的现成品”“你必须彻底搞明白它的设计思路”“你必须自己改进它”…… 👍🏽10 💭N/A IP 🕐2021-06-08 12:16:39
│ └── 岁颜: 换个说法就是链表用来干嘛和链表是怎么出现的 👍🏽2 💭N/A IP 🕐2021-06-08 12:45:25
│ └── 张小抽: 大家其实都说得挺明白了,我试着用自己的理解举个例子,前者是 我已经有车和20公里的油了,那么我思考我应该去哪才能用到这个里程数,思考的方向就很不集中,这也是题主提出的问题,而后者是,我有一个想去的地方,距离20公里,我应该怎么去 👍🏽2 💭N/A IP 🕐2021-06-08 12:50:51
│ └── 好名字: 筷子是用来干嘛的和用筷子来解决吃饭夹菜的问题,我告诉你筷子是用来夹菜,你死记硬背,吃菜要用筷子夹,但实际你还可以用叉子,筷子也不止只能夹菜。 👍🏽17 💭N/A IP 🕐2021-06-08 15:35:06
│ │ └── 咻咻: 得知晓甚至熟悉有筷子,勺子,刀子,叉子这些工具,吃干饭了自然选用筷子,吃西餐自然用刀叉。而不是紧抓筷子,坐等吃干饭。 👍🏽0 💭N/A IP 🕐2021-06-18 12:01:13
│ │ └── 知乎用户0FsF9X: 哈哈,你把我想说的给说出来了 👍🏽0 💭N/A IP 🕐2021-06-20 09:43:40
│ └── 天衣: 前者是学会了excel的使用方法,后者是做一个程序员。区别大了。 👍🏽0 💭N/A IP 🕐2021-10-07 17:57:27
│ └── Jimmy: 后者涉及发明的场景和过程, 需要了解的信息更多. 前者比较简单粗暴 👍🏽0 💭N/A IP 🕐2022-06-27 22:13:39
│ └── 米线君: 类似的问题:"高跟鞋是因为什么而发明的呢?"和"高跟鞋的用途是什么呢?"这两个问题的答案绝对不一样。[思考] 历史上发明初衷和最后用途不一样的很多。 👍🏽0 💭N/A IP 🕐2023-06-06 14:50:55
稻花轻诉: 你写这样的文章[思考]总是不让我过一遍脑子就行,非要放到收藏夹慢慢的看,太坏了 👍🏽7 💭N/A IP 🕐2021-06-18 11:10:29
Zzzzz: 强 学数据结构从来没有人这么说过 👍🏽7 💭N/A IP 🕐2021-06-09 09:50:42
轻海: 哈哈,我感觉看你一篇文章比看算法导论还带劲[捂脸] 👍🏽6 💭N/A IP 🕐2021-06-08 07:02:03
倚窗问雪: 授人以渔,谢 👍🏽4 💭N/A IP 🕐2021-06-08 09:45:39
vista: 所有的数据结构都是为了增删改查的改进,因为计算机存储系统的限制,以上需求的实现效率是相悖的。如果有人能做出一个同时实现上面功能的数据结构或者直接改进底层,那之前的数据结构都可以废掉。或者在不同应用场景中选择最适合的那个。 👍🏽5 💭N/A IP 🕐2021-12-05 00:55:49
子非鱼: 直指本质 👍🏽4 💭N/A IP 🕐2021-06-08 09:10:02
天衣: 拿程序设计语言的术语来说,链表的定义并不是final class List<T>,而是abstract class List<T>——前者是“这是一个现成的完美品”“用就对了别管它怎么实现也别试图改进它”;后者是“这并不是一个完美的现成品”“你必须彻底搞明白它的设计思路”“你必须自己改进它”……我觉得是说明书和原理图的区别。[大笑][大笑] 👍🏽3 💭N/A IP 🕐2021-10-07 18:00:24
我没有那么多彩: 简单说就是链表逻辑上连续,物理上不连续,方便增删,不方便查找方;数组逻辑跟物理上都连续,不方便增删,查找方便。 👍🏽4 💭N/A IP 🕐2021-07-23 08:17:19
│ └── Yul8ulY: 数组在物理上也不一定连续,内存里的数组可能会分散在不同的页,磁盘上的视文件系统不同分布情况也是五花八门[惊喜]还是把它当一个基本概念然后在实际情况具体分析吧 👍🏽2 💭N/A IP 🕐2023-01-30 03:30:55
Chennning: 我 tm,数据结构老师当年要是这么讲,我就不用转行了 👍🏽3 💭N/A IP 🕐2021-06-08 14:11:15
│ └── 小冬瓜: 你转到哪个行业了 👍🏽0 💭N/A IP 🕐2024-12-07 00:03:10
headless: 坏问题引出的好回答[赞同] 👍🏽3 💭N/A IP 🕐2021-07-19 03:12:44
红一叶: 学习一门学科其实是在学习它的历史。看它从出生到现在的过程。 👍🏽2 💭N/A IP 🕐2022-11-13 22:14:10
白衣阅读者: abstract打成absolute了嘛 👍🏽2 💭N/A IP 🕐2021-06-10 11:48:29
│ └── invalid s: 多谢,已改 👍🏽2 💭N/A IP 🕐2021-06-10 11:51:53
嘉然今天不吃饭: 太tm牛逼了答主 👍🏽2 💭N/A IP 🕐2023-10-15 12:49:21
│ └── 嘉然今天不吃饭: 复试前一天晚上再来欣赏一遍!太牛逼了答主!我必上岸! 👍🏽2 💭N/A IP 🕐2024-03-22 00:46:42
│ └── 嘉然今天不吃饭: 我已经上岸中科大软院 谢谢题主! 👍🏽3 💭N/A IP 🕐2024-05-22 18:27:01
惭愧人: 感觉国内90%的理工科教材是按论文的结构来编排的,保持理论的严谨性,同时也不用花很多精力。至于如何让面对的人群更容易理解和启发,乃至借鉴认知科学的研究来优化论述,那是不考虑的 👍🏽2 💭N/A IP 🕐2022-01-11 09:19:18
黄超: 一个final 暴露了是java[惊喜] 👍🏽0 💭N/A IP 🕐2022-10-10 11:50:25
Dopam: 赞上去,让所有人都看到正确的思考方式[赞同] 👍🏽1 💭N/A IP 🕐2022-11-16 07:28:11
郝呆: 先问为什么,再学是什么[赞同] 👍🏽1 💭N/A IP 🕐2022-08-28 12:24:53
Apple123zh: 对链表深恶痛绝(cache miss局部性很差),尽可能使用数组, 👍🏽1 💭N/A IP 🕐2022-08-21 12:39:36
爱吃鱼的猫: 回答得好,任何算法都是为了解决问题而存在的,不是从天而降的 👍🏽1 💭N/A IP 🕐2022-04-18 14:31:35
冬夏: 希望题主能单独出一版讲解数据结构的,提前给你点赞 👍🏽2 💭N/A IP 🕐2021-06-27 12:50:17
希尔伯特: 爱了爱了[赞同] 👍🏽2 💭N/A IP 🕐2021-06-08 01:40:48
lopper: 答主平时都看什么资料啊 👍🏽1 💭N/A IP 🕐2021-07-06 19:25:19
不败花丶: 人家已经在想链表的目的了,只不过思考的角度局限于时或空的优化 👍🏽1 💭N/A IP 🕐2021-07-01 09:01:26
张翠山: 有机会说一声跳表和链表的关系! 👍🏽0 💭N/A IP 🕐2025-01-02 09:38:47
小玄子: 要不是看你这篇回答,工作了10年的我还糊涂着呢。 👍🏽0 💭N/A IP 🕐2024-12-31 15:41:58
听风辨雨: 完全偏题,事实上使用链表的唯一的原因,就是它能既能在恰当的场景省时间,又能在恰当的场景下省空间。这样简单的结构不需要炫技。 👍🏽0 💭N/A IP 🕐2024-12-17 22:23:21
jebdish: 这个问题产生的根源其实还是绝大多数没有编程基础的人第一次学链表的时候,代码能力基本不会涉及不得不使用链表的场景。而当必须要使用链表时,即使没学过链表你也能用一堆指针搞出事实上就是链表的东西。某种程度上链表这概念有点多余。 👍🏽0 💭N/A IP 🕐2024-12-07 16:03:33
momo: 能否总结为第一性原理 👍🏽0 💭N/A IP 🕐2024-12-07 15:06:45
小哈贝马斯: 醍醐灌顶,我从计算机转实验核物理,从数字化获取系统里面得到的数据,根据需求去设计对应的数据结构来使用,复杂性没有红黑树那么复杂,但是恰好适合在这样的结构上使用[抱抱][抱抱]我想这就是计算机科班教会我的思想 👍🏽0 💭N/A IP 🕐2024-12-06 22:13:10
uiv30427h: 根本就是指针问题的延续嘛——数组,链表,指针。把这些搞清楚,才算真开始入门了 👍🏽0 💭N/A IP 🕐2024-12-06 19:43:10
小冬瓜: 明白了 👍🏽0 💭N/A IP 🕐2024-12-07 00:01:18
Atakn: 其实链表只是线性表的一种实现方式罢了,stl的vector指的就是线性代数里面的向量也就是线性表[捂脸] 👍🏽0 💭N/A IP 🕐2024-09-25 13:35:27
幸运的李祥: 链表的目的不就是为了考验反转链表吗[惊喜] 👍🏽0 💭N/A IP 🕐2024-02-24 16:25:49
越过淡季森林和电: 讲的真好 👍🏽0 💭N/A IP 🕐2023-12-26 19:04:12
干饭魂: 牛逼 读大哥的文章越多,越佩服您[拜托][拜托] 👍🏽0 💭N/A IP 🕐2023-11-18 15:16:07
知乎用户划: 题主很棒[爱] 很有耐心的回答 而且回答的这么好 真的很喜欢这种有生气的文章 让我能带入你的思想 👍🏽0 💭N/A IP 🕐2023-07-17 20:40:25
今天没吃早餐: "你要做它们的发明者,不要做它们的使用者。"能有这样的思维方式,太厉害了 👍🏽0 💭N/A IP 🕐2023-04-07 13:39:27
钟绿zero: 提壶灌顶 👍🏽0 💭N/A IP 🕐2023-03-28 12:50:01
000: 是的,总觉得学习上缺少前因后果,还有实际应用场景,如果把这些加入到学习过程中,那学习一定是很有趣的。 👍🏽0 💭N/A IP 🕐2023-03-01 12:45:14
Napoleon: 大佬理解深刻,每次品读都能收获良多 👍🏽0 💭N/A IP 🕐2023-02-24 01:48:14
胖虎很危险: 好厉害 👍🏽0 💭N/A IP 🕐2023-02-14 17:46:59
Lucian Evans: 讲得好啊[酷] 👍🏽0 💭N/A IP 🕐2022-12-16 08:41:09
bei lin: 写的太好了 👍🏽0 💭N/A IP 🕐2022-12-11 08:58:19
余让天: 我看到问题的第一反应,是怀表(老派人士连着根金链子揣口袋里)[捂脸] 👍🏽0 💭N/A IP 🕐2022-12-01 17:28:21
呵呵: 为了解决什么问题不就是谜底 不怎么地啊 👍🏽0 💭N/A IP 🕐2022-11-28 23:11:24
Snail Song: 牛逼 这就是大佬和菜狗的差异吧[大哭][大哭][大哭] 👍🏽0 💭N/A IP 🕐2022-11-16 21:53:24
Weotghraeulle: 大佬!! 👍🏽0 💭N/A IP 🕐2022-11-15 15:57:56
Torein: 非常赞成答主这种结合实际情况的讲解 👍🏽0 💭N/A IP 🕐2022-11-13 08:37:52
红星照耀世界: 大佬理解太深刻了 👍🏽0 💭N/A IP 🕐2022-11-06 07:01:06
IIIMAXGER: 受教了 👍🏽0 💭N/A IP 🕐2021-11-21 21:12:01
Dante: 真的是醍醐灌顶,学了这么久数据结构和算法,从来没考虑过它们的递进联系和设计思路的联系[捂脸] 👍🏽0 💭N/A IP 🕐2021-11-22 15:09:10
麻雀小狗头: 能做到从创造角度学习,很强[赞同] 👍🏽0 💭N/A IP 🕐2021-11-18 11:30:45
知乎用户OIbloV: 讲的很好啊 👍🏽0 💭N/A IP 🕐2021-11-16 07:46:35
蔡磊: 1. 那些ego太强的人还是适当调整一下自己,不然确如答主所说,最后妨碍的是你自己,这是学习的一大阻碍;2. 中国的教材貌似都有这种通病,直奔答案而不讲问题,直奔最终的解决方案而不讲历史背景和发展史,这是学习的另一大阻碍,一些大部头的英文原版书就好一些。 👍🏽0 💭N/A IP 🕐2021-11-16 08:46:03
小牛: 本科数据结构课不至于都得分裂症[大笑],不过也不得不承认,一些教师确实只知道分裂。 👍🏽0 💭N/A IP 🕐2021-11-04 09:37:23
裴之: 真的很好 👍🏽0 💭N/A IP 🕐2021-10-12 16:25:47
张鸣筝: 从实际出手, 融合分散的点, 妙! 👍🏽0 💭N/A IP 🕐2021-10-05 00:48:38
孙幼凌: 听君一席话,胜读十本书 👍🏽0 💭N/A IP 🕐2021-09-27 10:40:11
Rrrr: 答主的风格更偏工程学一些;我会更想让数据结构偏向理论计算机科学。那么首先,来定义计算模型😂 👍🏽0 💭N/A IP 🕐2021-09-23 00:17:06
基本检验合格: 听君一席话,胜读十年书 👍🏽0 💭N/A IP 🕐2021-09-20 10:39:24
│ └── invalid s: 吓我一跳,看了两遍才确认不是“听君一席话,犹如一席话”。 👍🏽0 💭N/A IP 🕐2021-09-20 16:10:24
│ └── 基本检验合格: [大笑]快开课,准备买了 👍🏽0 💭N/A IP 🕐2021-09-20 21:10:02
不知所起: 爱了 👍🏽0 💭N/A IP 🕐2021-09-15 15:18:24
应如是: 我其实也有很多相似的体会,谢谢你串起来并给予系统的教学 👍🏽0 💭N/A IP 🕐2021-09-10 22:03:19
知乎用户KayPZb: 羡慕 👍🏽0 💭N/A IP 🕐2021-09-03 21:57:29
不负韶华: 不明觉厉 👍🏽0 💭N/A IP 🕐2021-09-03 15:37:41
呦呦呦: 牛的一批,tql 👍🏽0 💭N/A IP 🕐2021-08-25 23:01:57
永远的谎言: 真心感谢答主的分享[大笑] 👍🏽0 💭N/A IP 🕐2021-08-17 23:43:40
哈利勃特: 国内教材狗都不看[惊喜] 👍🏽0 💭N/A IP 🕐2021-08-07 12:11:26
者也: 高观点[赞同] 👍🏽0 💭N/A IP 🕐2021-07-27 21:36:44
户有福: 牛逼啊 👍🏽0 💭N/A IP 🕐2021-07-20 08:28:11
雨山前: 透彻 👍🏽0 💭N/A IP 🕐2021-07-15 12:04:35
木木三: 就喜欢这种在大气层往下看的理解! 👍🏽0 💭N/A IP 🕐2021-07-10 22:16:36
我不是大眼睛: 相当的透[思考] 👍🏽0 💭N/A IP 🕐2021-07-10 18:31:21
闪光桐人: 这样一说我瞬间就理解了(然后想起来我们老师好像也说过类似的)。果然单纯学知识的话知乎还是不错的 👍🏽0 💭N/A IP 🕐2021-07-09 11:49:15
启喻: [赞同]一下子明白了,我要弄明白的不是这是单链表、那是二叉树,而是弄明白它们是怎么演化来的、用来解决什么样的问题给这方面的学习带来了新思路,凡事还是得多想为什么 👍🏽0 💭N/A IP 🕐2021-07-07 21:01:26
塔云: 很棒,数据结构我以前也背的很熟,感觉自己掌握了,但今天我又认识到了新的东西,新的理解。谢谢。 👍🏽0 💭N/A IP 🕐2021-07-07 20:38:13
木哥哥: 对呀,没有目的,只是在解决某些问题的时候,它很管用,你要是有更好的思路,完全可以摒弃它。 👍🏽0 💭N/A IP 🕐2021-07-03 23:26:02
知否: 就喜欢这样的回答 👍🏽0 💭N/A IP 🕐2021-06-30 18:27:16
zhhui yan: 粉了 👍🏽0 💭N/A IP 🕐2021-06-30 15:15:02
付寒宇: [赞同] 👍🏽0 💭N/A IP 🕐2021-06-29 11:24:41
緈一丶: 最近几天开始学链表,就感觉很懵,根本不知道从哪里下手,代码都认识,就是不理解,感觉没有前面的顺序表好学。而且请问一下大佬有没有推荐的c语言书籍? 👍🏽0 💭N/A IP 🕐2021-06-28 20:36:30
Ethan: 就像高考一样,只有直白的告诉你这道题用链表,你才可能会做,否则,你连想都想不起来 👍🏽0 💭N/A IP 🕐2021-06-27 00:47:39
peppa3: 讲的好,可以为师矣,感谢! 👍🏽0 💭N/A IP 🕐2021-06-26 21:31:54
mznsbd: 胜读十年书 👍🏽0 💭N/A IP 🕐2021-06-24 19:12:53
阿西陆河: 醍醐灌顶👍向大佬学习 👍🏽0 💭N/A IP 🕐2021-06-24 12:47:05
陈云龙: 建议开一个数据结构专栏 👍🏽0 💭N/A IP 🕐2021-06-23 23:05:00
Sui: 有一种恍然大悟的感觉 👍🏽0 💭N/A IP 🕐2021-06-23 17:32:42
十月钟声: 虽然讲的很好,但是我觉得应该点开问题描述用实际例子解答一下提问者的疑惑 👍🏽0 💭N/A IP 🕐2021-06-23 08:57:57
flow: 数组要找到特定数据不也得遍历吗? 👍🏽0 💭N/A IP 🕐2021-06-21 13:42:09
一分流水: 我一定是最近搜了好些关于手表怀表的问题才会被推送这种答案。我看了五秒钟才反应过来这说的是什么 👍🏽0 💭N/A IP 🕐2021-06-21 09:28:58
麻老虎带薪拉X: 感谢分享 👍🏽0 💭N/A IP 🕐2021-06-21 08:47:50
idear是我: 豁然开朗啊[欢呼] 👍🏽0 💭N/A IP 🕐2021-06-20 14:21:34
rebornex: 链表、各种树就是为了更好的存储数据,要玩明白数据结构还是要多学多练,然后自己再创新。 👍🏽0 💭N/A IP 🕐2021-06-20 14:18:32
魔都小酱油: 牛逼,把复杂的问题讲简单,这是高手! 👍🏽0 💭N/A IP 🕐2021-06-19 15:51:03
天若有情天亦老: 思想才是最重要的,不管到哪都一样 👍🏽0 💭N/A IP 🕐2021-06-18 14:49:49
Pumpkin: 醍醐灌顶[赞同] 👍🏽0 💭N/A IP 🕐2021-06-18 12:15:01
13乎让我改名: 受教了[赞] 👍🏽0 💭N/A IP 🕐2021-06-18 11:53:20
无知的人: 牛逼啊 👍🏽0 💭N/A IP 🕐2021-06-18 01:21:41
腾飞: 深以为然 👍🏽0 💭N/A IP 🕐2021-06-17 20:14:27
且听风吟: 真想听你串讲下数据结构,真是醍醐灌顶啊 👍🏽0 💭N/A IP 🕐2021-06-16 15:22:27
崔亚杰: 说的很透彻! 👍🏽0 💭N/A IP 🕐2021-06-16 12:35:39
Diabolum: 优质回答,感谢! 👍🏽0 💭N/A IP 🕐2021-06-16 12:26:44
代号One: 老哥,开课吗?我想消费了[爱][爱][爱] 👍🏽0 💭N/A IP 🕐2021-06-16 11:00:30
Devin: Pointer Machine, Random Access Machine 👍🏽0 💭N/A IP 🕐2021-06-12 20:35:07
Schiele: 刚开始还以为答主故作玄虚,问题问的是怀表有什么用,然后搁这扯一堆,认真看了一半发现原来是在讲计算机[捂脸][捂脸] 👍🏽0 💭N/A IP 🕐2021-06-12 19:29:21
maeningLESSname: 讲链表前抛一个算法题就完事了 👍🏽0 💭N/A IP 🕐2021-06-12 22:16:54
知乎用户joLl8h: 讲得很好[赞] 👍🏽0 💭N/A IP 🕐2021-06-12 17:47:55
南风知我意: 好强[大哭] 👍🏽0 💭N/A IP 🕐2021-06-11 22:21:58
布莱恩丹: 牛 👍🏽0 💭N/A IP 🕐2021-06-10 22:03:58
知乎用户h6PIPf: 非常感谢!讲得太清晰了 👍🏽0 💭N/A IP 🕐2021-06-10 18:57:42
溶解bot: 求大佬把整个数据结构都来一遍吧,付费课程都行QAQ 👍🏽0 💭N/A IP 🕐2021-06-10 14:30:03
郝帅: 感觉我好像懂了一点什么,又好像啥都没懂 👍🏽0 💭N/A IP 🕐2021-06-10 11:37:39
刘某某: 醍醐灌顶啊,一下子给我把数据结构的宏观思路搭建好了,数据结构的本质就是为了如何更高效的处理大量数据(包括:更删改查); 👍🏽0 💭N/A IP 🕐2021-06-10 10:24:47
光子猫: 最后一段的关键字应该是abstract吧[蹲] 👍🏽0 💭N/A IP 🕐2021-06-10 08:57:01
投石: 您说出了我学习过程中的心声,真的太棒了 👍🏽0 💭N/A IP 🕐2021-06-10 08:42:47
一直飞翔鸭: 面试字节前端,也被问到了链表,蛋疼,堪比空间站 👍🏽0 💭N/A IP 🕐2021-06-09 19:37:45
曹孟德: 这个思路挺好的 👍🏽0 💭N/A IP 🕐2021-06-09 10:57:31
知乎用户CMaEMg: 感谢,突然间通透了,拜谢 👍🏽0 💭N/A IP 🕐2021-06-09 11:36:01
qwweegsunny: 链表应用在数据量不确定的场景之中 👍🏽0 💭N/A IP 🕐2021-06-09 12:00:17
think: 这么会说多说点,我还想听 👍🏽0 💭N/A IP 🕐2021-06-09 10:58:56
机械夯客: 你这么牛逼,除了我还有谁知道 👍🏽0 💭N/A IP 🕐2021-06-09 07:25:43
liangs333: 精彩 👍🏽0 💭N/A IP 🕐2021-06-08 23:30:03
枫落: 强得一,学到了学到了 👍🏽0 💭N/A IP 🕐2021-06-08 23:28:59
没有名字: 具体问题具体分析。这种现象是应试教育的遗毒。或者说是命题人水平不行,出的题目太low。 👍🏽0 💭N/A IP 🕐2021-06-08 23:09:44
AReader: 厉害了老铁 👍🏽0 💭N/A IP 🕐2021-06-08 21:05:56
周义: 强啊[惊喜] 👍🏽0 💭N/A IP 🕐2021-06-08 18:36:43
OMGJL: 牛B![赞同][赞同][赞同] 👍🏽0 💭N/A IP 🕐2021-06-08 20:27:10
何冬州杨巅杨艳华典生: 有没有化学反应式可变自动化数据结构。。。 👍🏽0 💭N/A IP 🕐2021-06-08 19:13:38
舟楠: 要死了为什么神仙这么多[捂脸][捂脸][捂脸] 👍🏽0 💭N/A IP 🕐2021-06-08 15:42:46
李某某: 讲的太好了 👍🏽0 💭N/A IP 🕐2021-06-08 14:04:58
风追沙: 厉害了厉害了 👍🏽0 💭N/A IP 🕐2021-06-08 13:06:32
心猿意马: 大佬牛逼,真的学到了。 👍🏽0 💭N/A IP 🕐2021-06-08 11:36:50
cc feng: 难怪我觉得问题怎么看都不对但是完全不知道怎么回答[捂脸] 👍🏽0 💭N/A IP 🕐2021-06-08 11:07:45
千愁: 你要做它们的发明者,不要做它们的使用者。 👍🏽0 💭N/A IP 🕐2021-06-08 11:19:23
南山: 学到了 👍🏽0 💭N/A IP 🕐2021-06-08 11:00:14
哪路货多: 写的太好了,突然感觉悟了[赞同][赞同][赞同] 👍🏽0 💭N/A IP 🕐2021-06-08 11:05:34
知乎用户gNHIiN: 讲的真好。我之前一直没想过二叉树和链表的关系。你一句话点破了。(一名半路出家的菜鸡留) 👍🏽0 💭N/A IP 🕐2021-06-08 10:18:43
隨緣: 小白看懂了 👍🏽0 💭N/A IP 🕐2021-06-08 11:02:59
马林: 真的感谢。大佬说到点子上了,比那些书籍上就是这就是链表的描述强太多。 👍🏽0 💭N/A IP 🕐2021-06-08 09:59:18
嵩山弟子: 很好的回答,站的比较高 👍🏽0 💭N/A IP 🕐2021-06-08 09:55:20
一线三点: 学到了 关注了 👍🏽0 💭N/A IP 🕐2021-06-08 09:13:13
刘某某: 确实牛逼,我以前都没这个意识,答主牛逼 👍🏽0 💭N/A IP 🕐2021-06-08 09:28:21
马来: 思维方向的改变,真的降维打击[捂脸]学到了很多 👍🏽0 💭N/A IP 🕐2021-06-08 09:09:40
投石问路: 高手! 👍🏽0 💭N/A IP 🕐2021-06-08 09:15:45
│ └── 投石问路: 我从来没想过他们的核心是指针 👍🏽0 💭N/A IP 🕐2021-06-08 09:20:14
│ └── cc feng: 因为以前教材是从C开始教的,从C的角度,链表其实是很自然的选择,完全不会问出这种问题 👍🏽0 💭N/A IP 🕐2021-06-08 11:09:39
没有: 鹈鹕灌顶[吃瓜] 👍🏽0 💭N/A IP 🕐2021-06-08 08:35:05
给我一杯星冰乐: 写的真好 👍🏽0 💭N/A IP 🕐2021-06-08 08:23:14
描绘空白页: [赞同][赞同][赞同] 👍🏽0 💭N/A IP 🕐2021-06-08 08:18:28
新世纪码农战士: 题主是当老师的嘛?能跳出知识点讲知识点 👍🏽0 💭N/A IP 🕐2021-06-08 07:10:35
Sleepy: 回答得漂亮。看来我也得回去复习一下了。 👍🏽0 💭N/A IP 🕐2021-06-08 06:37:49
Gallay: 都讲到点上了,优秀 👍🏽0 💭N/A IP 🕐2021-06-08 06:02:25
GT老张: 思路清晰,赞 👍🏽0 💭N/A IP 🕐2021-06-08 07:39:15
王若谷: 大佬,豁然开朗 👍🏽0 💭N/A IP 🕐2021-06-08 03:07:56
Tony Fan: 牛叉 👍🏽0 💭N/A IP 🕐2021-06-08 00:39:31
氘化氢二世: 原来如此,豁然开朗[赞同][赞同][赞同] 👍🏽0 💭N/A IP 🕐2021-06-08 00:22:27
dreaming: 豁然开朗[赞同] 👍🏽0 💭N/A IP 🕐2021-06-08 00:09:39
树精: 学习了 👍🏽0 💭N/A IP 🕐2021-06-08 00:17:00
康先森: 大学老师能讲一个学期 👍🏽0 💭N/A IP 🕐2022-10-02 11:39:00
章章: 目的和解决什么问题不是一个意思? 👍🏽0 💭N/A IP 🕐2022-09-30 20:25:32
│ └── 章章: 比如用链表的目的就是解决某某问题, 👍🏽0 💭N/A IP 🕐2022-09-30 20:25:53
山禾: 经典[赞同] 👍🏽0 💭N/A IP 🕐2022-09-30 11:16:23
陈十三: 请问所说的数据结构与算法一书,是哪本? 👍🏽0 💭N/A IP 🕐2022-09-16 16:34:46
RamseyX: [可怜] 👍🏽0 💭N/A IP 🕐2022-09-16 02:45:52
C是最好的语言: 学到了学到了 👍🏽0 💭N/A IP 🕐2022-09-09 21:08:23
JERRY: 太TM对了。掌握知识就是为了在应对复杂时,能够因地制宜、游刃有余地从知识库中筛选、组合出最有效的办法。 👍🏽0 💭N/A IP 🕐2022-09-06 22:49:01
change: 看到了没,这tm才叫学透了 👍🏽0 💭N/A IP 🕐2022-08-28 11:18:35
蒜香排骨: 这一个回答,顶一学期的数据结构与算法的课程[赞同] 👍🏽0 💭N/A IP 🕐2022-08-23 08:56:22
千丘农舍: 答主别跑…那算法在讲什么?最近刷题刷到精神崩溃,我去看看你写过什么提纲挈领的答案 👍🏽0 💭N/A IP 🕐2022-08-06 00:01:43
中二病什么的最可爱了: 原来链表是这个意思,我还纳闷链表怎么空间时间的,原来那个叫陀表,不是有链子就叫链表[大笑] 👍🏽0 💭N/A IP 🕐2022-04-21 11:53:25
│ └── invalid s: 哈哈哈,又一个玩怀表的 👍🏽0 💭N/A IP 🕐2022-04-21 12:03:34