43 collections linked-list car-analogy
我理解链接列表的定义,但它如何表示并与一个共同的概念或项目相关?
例如,OOP中的组合(EDIT:最初称为'继承')可以与汽车相关.现实生活中的所有(大多数)汽车都是基本相同的东西; 汽车有一个引擎,你可以启动()它,你可以使汽车go(),停止()等.汽车通常具有最大乘客容量,但在公共汽车和SportsCar之间会有所不同,它们都是汽车.
是否有一些现实生活,直观的例子,就像我们继承的那样,单一链接列表?典型的教科书链接列表示例显示了一个带有整数和指向下一个节点的节点,它似乎不太有用.
感谢您的意见.
Mik*_*per 47
我假设你想要一个比书定义更隐喻的解释,而不是你如何使用链表的例子.
链表有点像寻宝者.你有一个线索,那个线索有一个指向找到下一个线索的地方.所以你去下一个地方获得另一个数据和另一个指针.要获得中间或最后的东西,唯一的方法就是从头开始(或欺骗;))
Ada*_*vis 35
链接列表的实际现实示例是什么?
最简单,最直接的是火车.
列车车辆按特定顺序链接,以便可以以最有效的方式装载,卸载,转移,下车和拾取.
例如,Jiffy Mix工厂需要糖,面粉,玉米面等.在弯道附近可能是需要氯,硫酸和氢的纸加工厂.
现在,我们可以停下火车,卸下每辆车的内容,然后让火车继续行驶,但是火车上的其他东西都必须坐下,同时面粉从沉箱中吸出,然后是糖等.
相反,汽车按顺序装载在火车上,以便可以拆卸整块火车,火车的其余部分继续前进.
火车的末端比中间的一部分更容易分离,并且比在一个地方分离几辆汽车和在另一个地点分离几辆汽车容易得多.
但是,如果需要,您可以在列车的任何位置插入和移除物品.
很像链表.
-亚当
小智 12
首先要理解的是,链表在概念上与数组相同.
唯一的区别在于各种操作的效率.最重要的是:
因此,可以用于阵列的任何类比(飞机的所有引擎,购物清单上的所有项目......)也适用于链表,但效率考虑因素可以使得另一个类比:
数组可以是书架中的盒子.当您从第n行中取出盒子时,所有来自n + 1的盒子需要向下移动一个架子(因此您没有麻烦的空架子).
相反,链表是项链.当你发现自己不再喜欢那颗蓝色宝石时,请将它从序列中取出并将得到的两端结合在一起.无需绕过每颗珍珠并将其移位,以便您可以修理项链.
War*_*pin 10
Blame的方式围绕着一群在项目中处理不同模块的软件工程师.
首先,GUI家伙因产品无效而受到指责.他检查了他的代码并发现这不是他的错:API正在搞砸.API人检查他的代码:不是他的错,这是记录器模块的问题.记录器模块的家伙现在责备数据库的家伙,谁责怪安装人员,谁责怪...
我记得很多年前,在我的第一个大学课程中,想知道我会在哪里使用链表.今天,我认为没有一个项目我在没有使用过的地方工作,而且在很多地方.这是一个非常基础的数据结构,相信我,它在现实世界中被大量使用.
例如:
你现在看起来似乎有些无用,但是几年之后,问自己同样的问题,你会发现自己很惊讶你曾经想过它会被用在哪里.
编辑: 我在你的一条评论中注意到你问到为什么指针很重要.有人正确地回答说指针对链表的用户并不重要.用户只需要一个包含一个事物列表的列表.该列表如何"包含"该事项列表对用户而言并不重要.指针是"如何"的一部分.想象一下画在地板上的一条线,通向出纳员.人们需要站在那条线上才能到达出纳员.对于链表使用的指针,该行是(我承认,这有点拉伸)类比.第一个人,在出纳员,在线,是列表的头.在线上直接跟在他们后面的人是列表中的下一个.最后,该行中的最后一个人是该列表的尾部.
现实生活中的例子:
**1)单链表**
2)双重链表
3)循环链表
如果您考虑一下,"链接"只是识别数据实例之间的"下一步","上一页","子"或"父"关系的一种方式. 因此,在实际应用程序中,您将找到各种各样的应用程序.想想基本链接列表的简单列表(例如Grocery List).但也要考虑我们可以放置图形的用途(绘制地图上城市之间的距离,生物学中物种之间的相互作用)或树木(组织中的层次结构或数据库索引中的数据,用于两个非常不同的例子).
人脑可以是单链表的一个很好的例子。在用心学习某些东西的初始阶段,自然的过程是将一个项目与下一个项目联系起来。这是一种潜意识的行为。让我们以抢劫华兹华斯的孤独收割者的8 行为例:
Behold her, single in the field,
Yon solitary Highland Lass!
Reaping and singing by herself;
Stop here, or gently pass!
Alone she cuts and binds the grain,
And sings a melancholy strain;
O listen! for the Vale profound
Is overflowing with the sound.
Run Code Online (Sandbox Code Playgroud)
我们的大脑不像一个便于随机访问的数组那样运作良好。如果你问这个人最后一行是什么,他会很难说出来。他必须从一号线到达那里。如果你问他第五行是什么就更难了。
同时如果你给他一个指针,他就会前进。好的从Reaping and singing by herself;?开始。现在变得更容易了。如果你能给他两句台词,那就更容易了,Alone she cuts and binds the grain, And sings a melancholy strain;因为他能更好地理解流程。同样,如果您什么都不给他,他将不得不从头开始才能获得台词。这是经典的链表。
类比中应该有一些可能不太合适的异常,但这在某种程度上解释了链表的工作原理。一旦您变得有点精通或完全了解这首诗,链表就会(大脑)滚动到一个哈希表或数组中,这有助于 O(1) 查找,您可以在其中从任何地方选择行。
单链表的一些例子。
双链表的一些例子。
| 归档时间: |
|
| 查看次数: |
102100 次 |
| 最近记录: |