我理解链接列表的定义,但它如何表示并与一个共同的概念或项目相关?
例如,OOP中的组合(EDIT:最初称为'继承')可以与汽车相关.现实生活中的所有(大多数)汽车都是基本相同的东西; 汽车有一个引擎,你可以启动()它,你可以使汽车go(),停止()等.汽车通常具有最大乘客容量,但在公共汽车和SportsCar之间会有所不同,它们都是汽车.
是否有一些现实生活,直观的例子,就像我们继承的那样,单一链接列表?典型的教科书链接列表示例显示了一个带有整数和指向下一个节点的节点,它似乎不太有用.
感谢您的意见.
链表就像康加舞线.每个人都把人的臀部握在他们面前,他们的臀部轮流被人们依次握在后面,除了正面和背面的人.将人员添加到该行的唯一方法是找到正确的位置并将该连接解耦,然后插入新的人或人.
我假设你想要一个比书定义更隐喻的解释,而不是你如何使用链表的例子.
链表有点像寻宝者.你有一个线索,那个线索有一个指向找到下一个线索的地方.所以你去下一个地方获得另一个数据和另一个指针.要获得中间或最后的东西,唯一的方法就是从头开始(或欺骗;))
链接列表的实际现实示例是什么?
最简单,最直接的是火车.
列车车辆按特定顺序链接,以便可以以最有效的方式装载,卸载,转移,下车和拾取.
例如,Jiffy Mix工厂需要糖,面粉,玉米面等.在弯道附近可能是需要氯,硫酸和氢的纸加工厂.
现在,我们可以停下火车,卸下每辆车的内容,然后让火车继续行驶,但是火车上的其他东西都必须坐下,同时面粉从沉箱中吸出,然后是糖等.
相反,汽车按顺序装载在火车上,以便可以拆卸整块火车,火车的其余部分继续前进.
火车的末端比中间的一部分更容易分离,并且比在一个地方分离几辆汽车和在另一个地点分离几辆汽车容易得多.
但是,如果需要,您可以在列车的任何位置插入和移除物品.
很像链表.
-亚当
柜员/收银员等候等候......
必须按顺序执行的一系列订单.
任何FIFO结构都可以实现为链表.
首先要理解的是,链表在概念上与数组相同.
唯一的区别在于各种操作的效率.最重要的是:
插入中间:列表为O(1),数组为O(n).
直接访问中间的元素:列表为O(n),数组为O(1).
因此,可以用于阵列的任何类比(飞机的所有引擎,购物清单上的所有项目......)也适用于链表,但效率考虑因素可以使得另一个类比:
数组可以是书架中的盒子.当您从第n行中取出盒子时,所有来自n + 1的盒子需要向下移动一个架子(因此您没有麻烦的空架子).
相反,链表是项链.当你发现自己不再喜欢那颗蓝色宝石时,请将它从序列中取出并将得到的两端结合在一起.无需绕过每颗珍珠并将其移位,以便您可以修理项链.
Blame的方式围绕着一群在项目中处理不同模块的软件工程师.
首先,GUI家伙因产品无效而受到指责.他检查了他的代码并发现这不是他的错:API正在搞砸.API人检查他的代码:不是他的错,这是记录器模块的问题.记录器模块的家伙现在责备数据库的家伙,谁责怪安装人员,谁责怪...
我记得很多年前,在我的第一个大学课程中,想知道我会在哪里使用链表.今天,我认为没有一个项目我在没有使用过的地方工作,而且在很多地方.这是一个非常基础的数据结构,相信我,它在现实世界中被大量使用.
例如:
需要在医学成像应用程序中刻录到CD的图像列表
需要通过电子邮件发送一些通知的网站用户列表
需要渲染到屏幕的3D游戏中的对象列表
你现在看起来似乎有些无用,但是几年之后,问自己同样的问题,你会发现自己很惊讶你曾经想过它会被用在哪里.
编辑: 我在你的一条评论中注意到你问到为什么指针很重要.有人正确地回答说指针对链表的用户并不重要.用户只需要一个包含一个事物列表的列表.该列表如何"包含"该事项列表对用户而言并不重要.指针是"如何"的一部分.想象一下画在地板上的一条线,通向出纳员.人们需要站在那条线上才能到达出纳员.对于链表使用的指针,该行是(我承认,这有点拉伸)类比.第一个人,在出纳员,在线,是列表的头.在线上直接跟在他们后面的人是列表中的下一个.最后,该行中的最后一个人是该列表的尾部.
你的DNA分子是双链表.
链条:
特别是滚子链:
链中的每个元素都与其后继者和前身相连.
现实生活中的例子:
**1)单链表**
一个孩子的人类大脑(为了记住一些东西,例如.他必须把它连接起来,如果你要问他最后一行,他必须从第一行读取)
网络上的消息传递(消息被分成数据包,每个数据包都有一个下一个的密钥,因此在接收方的末端,很容易将它们分组)
2)双重链表
DNA分子
浏览器缓存允许使用BACK按钮.
火车教练与下一个和前一个教练有关.
自行车滚子链(双圆链表)
3)循环链表
自动楼梯
调度程序在调度操作系统中的进程期间使用的时间共享问题.
多玩家棋盘游戏
如果您考虑一下,"链接"只是识别数据实例之间的"下一步","上一页","子"或"父"关系的一种方式. 因此,在实际应用程序中,您将找到各种各样的应用程序.想想基本链接列表的简单列表(例如Grocery List).但也要考虑我们可以放置图形的用途(绘制地图上城市之间的距离,生物学中物种之间的相互作用)或树木(组织中的层次结构或数据库索引中的数据,用于两个非常不同的例子).
在一般情况下,链接列表是您将遇到的最恶劣有用的事情之一.
现实世界的例子:
一群人排队等候某种东西 - 一种叫做"队列"的特殊LL.
您的瓷器柜中的一堆餐具 - 一种特殊的LL称为"堆栈".
"取一个数字"行(数字必须在某个时刻以"1"重新开始) - 一种称为"循环队列"的特殊LL.
一般来说,我喜欢用于几乎所有链接数据结构的比喻是一副牌.几乎任何你可以用链表做的事情,你都可以用一副牌来形象化.这对于展示自己在一些更深奥的排序算法中发生了什么特别方便.
我个人的最爱:Bogosort =玩52张卡片,直到你的牌组分类.:-)