范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

链表,画几下就整明白了!

  大家好呀,我是帅蛋。
  数组 的文章中给大家伙儿说过,连续的内存使得数组在进行插入和删除时需要移动大量元素,这就意味着要耗费时间。
  在数据结构与算法中,快男才是大家的最爱,像插入和删除这么持久的蓝孩子显然不受待见。
  后来,大家就想方设法帮助它们变快。
  那么有没有这么一种数据结构可以达成这一目的呢?
  链表就这么被整出来了。
  相比于数组,链表是稍微复杂一些的数据结构,但是不难,只要跟着本蛋就能学会。
  文章导读链表
  首先什么是链表?
  线性表的链式存储结构生成的表,叫做链表。
  那么什么是链式存储结构咧?
  链式存储结构是指 用一组任意的存储单元存储线性表的数据元素,通过指针连接串联起来。
  这里的"任意"指的就是, 存储单元可以连续也可以不连续, 这就意味着 它们可以是内存中任何未被占用的地方。 有味儿点讲就是只要内存这个厕所里空着的茅坑,你就随便蹲。
  链表中的存储单元叫做 节点 。它和数组中只存数据信息不同,每个节点分为两部分: 数据域和指针域 。数据域存储的数据,指针域存储着同一个表里下一个节点的位置。
  因为链表家族里的兄弟姐妹太多,在这里咧我只讲常见的几种链表结构:单链表、双向链表。
  毕竟再多,我写的就累死了… 单链表
  n 个节点可以链接成一个链表,如果 链表中的每个节点只包含一个指针域,这个链表就叫做单链表。
  单链表的指针域指向的是下一个节点的地址,我们把指向下个节点地址的指针叫做 后继指针 。
  单链表的第一个节点的存储位置叫做 头指针 , 最后一个节点的后继指针为空 ,一般用 NULL 或者 "^" 表示。
  除了上面的,有时候为了操作方便,会在单链表的第一个节点前面加一个节点,称之为 头节点 。这个头节点一般不存储任何内容,它的指针域指向单链表的第一个节点。
  臭宝:停停停!又是头指针又是头节点的,有点懵…
  帅蛋:莫慌,有我。
  头指针与头节点的区别
  头指针 ,顾名思义,是指向链表第一个结点的指针,如果有头结点的话,那么就是指向头结点的指针。
  它是链表的必备元素且无论链表是否为空,头指针都不能为空 ,因为在访问链表的时候你总得知道它在什么位置,这样才能通过它的指针域找到下一个结点的位置,也就是说知道了头指针,整个链表的元素我们都是可以访问的。
  所以头指针必须要存在,这也就是我们常说的 标识 ,这也就是为什么我们一般用头指针来表示链表。
  头结点 ,是放在第一个元素的节点之前,它的数据域一般没有意义,并且它本身也不是链表必须要带的。
  它的设立是单纯是为了操作的统一和方便 ,其实就是为了在某些时候可以更方便的对链表进行操作,有了头结点,我们在对第一个元素前插入或者删除结点的时候,它的操作与其它结点的操作就统一了。
  除此以外,还有一种啥也没有,空空空空~ 空链表 。
  不知道大家发现了没,不管是带头节点,还是不带头节点,或者是空的链表,它们都是有头指针的,这正印证了我在上面提到过的" 头指针是链表的必备元素,无论链表是否为空,头指针都不能为空 "。
  别说话,夸我~
  单链表的操作
  和数组一样,单链表也有查找、插入和删除等操作。因为链表的存储空间是不连续的,所以链表的插入和删除操作是很快速的。
  1、插入操作
  假设我们要完成一个插入操作:在节点 p 后面插入节点 s。
  正确的做法是,只需要将节点 s 插入到节点 p 和节点 p.next 之间就可以,说起来很简单,具体操作请看下图。
  从上图中可以看出,单链表的插入其实根本不需要惊动其它的节点,只需要让 s.next 的指针和 p.next 的指针稍作改变。 让节点 s 的后继指针指向 p 的后继节点,然后 p 的后继指针指向节点 s,这里切记,插入操作的顺序一定不能改变。
  可以看出插入操作的时间复杂度是 O(1)。
  2、删除操作
  假设我们要完成一个删除操作:删除节点 p 的后继节点 q。
  其实也简单,就是将 p 的后继指针绕过 q,直接指向 q 的后继节点即可,具体操作如下图。
  由上图看出,同样只需要一步就可以实现删除操作,直接让 p.next 指向 q.next 即可,所以删除操作的时间复杂度为 O(1)。
  3、查找操作
  当然啦,有快的地方就有慢的地方,元素的查找就是链表美中不足的地方。
  数组在内存中排排坐不同,链表的在内存中的地址是分散的,只能通过前一个节点的 next 才知道当前节点的位置,所以在链表中想要找第 i 个元素,只能傻傻的从头开始找,直到找到第 i 个元素位置。
  从这可以看出,链表中查找操作的时间复杂度是 O(n)。
  单链表实际应用场景
  单链表说了这么多也差不多了,辣么有个问题,我学了这个玩意能用在哪呢?
  easy!
  单链表的应用的话一般能用在  2 种场景 下:
  (1) 第 1 种基操。 在你应用的场景中,插入和删除的操作特别多,你不想因为这俩操作浪费你太多的时间,此时用单链表,可以改善插入和删除操作浪费的时间。
  (2) 第 2 种骚操。在你应用的场景种,不知道有多少个元素,那这个时候你用单链表,每来一个新的元素你就链在表里,这种情况是用链表处理的绝佳方式。也是很容易被大家忽略的。
  双向链表
  双向链表 ,顾名思义,两个方向向的链表。 相比起单链表来说,它多了一个前驱指针 prev,指向前驱节点。 这样双向链表既可以往前走,也可以往后走。
  从上面两张图看,双向链表多了一个前驱指针,使得在内存上比单链表占用更多的空间,但是 双向链表在查询链表元素的时候会更加方便 ,比如可以在 O(1) 的时间内超找到当前节点的前驱节点,这是典型的用空间换时间。
  空间换时间 ,在内存够用的情况下,为了追求更快的执行速度,选择空间复杂度较高,时间复杂度较低的数据结构或者算法。
  既然用了时间换空间,那双向链表比单链表快在哪个地方呢?那这个还是从插入、删除操作说起。
  可能在这臭宝们拿起键盘会说,单链表的插入和删除都已经是 O(1) 了,还要怎么快?
  其实准确点来说, 插入和删除是 O(1),更多的是针对插入或删除这单个动作来说的,在实际情况下,一切都有前置条件。 在某些前置条件下的实际应用场景,双向链表比单链表更快。
  下面开始表演。
  插入操作优势
  插入操作,无非就是 2 种情况: 在 "data域等于某个特定值"的节点前或者后插入一个新的节点。 在给定的节点前或者后插入一个新的节点。
  针对第 1 种,这俩时间复杂度都差不多。都是分两个步骤:
  第一步找到 data 域等于某个特定值的节点,无论单链表还是双向链表都需要从头开始一个一个的遍历,这一步的时间复杂度都是 O(n)。
  第二步就是插入操作。如果都是向后插入的话,那时间复杂度都是 O(1),如果是向前插入的话,那单链表慢一些,它需要再重新找到特定值节点的前驱节点,这个时间又花费 O(n),而双向链表不用,因为它有前驱节点,直接就能找到特定值节点的前驱节点,这个时间花费的是 O(1) 。
  针对第 2 种情况,其实他就是第 1 种情况中的第二步,已经找到了要插入的节点,如果都是向后插入的话,单链表和双链表的时间复杂度都一样,都是 O(1)。差别就差向前插入,向前插入的话就需要知道当前节点的前驱节点,单链表需要重新遍历到当前节点的前驱节点,总的时间复杂度是 O(n),而双向链表一下子就能找到它的前驱节点,时间复杂度是 O(1)。
  这就是双向链表优势于单链表的地方。
  删除操作优势
  删除操作,和插入操作差不多,也基本上是 2 种情况: 删除 "data域等于某个特定值"的节点。 删除给定的节点。
  第 1 种情况就不说了,单链表和双向链表都一样,都是从头开始一个个的遍历,时间复杂度都是 O(n)。
  第 2 种情况,删除给定的节点,这就要求需要知道这个节点的前驱节点。单链表需要从头开始找,直到"node.next = 当前节点"的适合,才是找到了当前节点的前驱节点 node,这个过程的时间复杂度是 O(n)。而双向链表直接就知道它的前驱节点,只需要时间复杂度是 O(1) 就可以搞定。
  常见的链表到这就讲完啦,当然在这基础上衍生出来的像循环链表、循环双向链表都还没说,一次整太多怕你们消化不良。
  链表这东西呢,不要怕,虽然看起来有些复杂,但其实就那几板斧,学链表的时候多在纸上画画,各种关系无所遁形,啥都就整明白了,不信你试试。
  当然啦,能看到这的都是真爱, 麻烦动动小手帮我点个赞呀 ~
  我是帅蛋,我们下次见!

深圳最淡定的城中村,租客越来越少,房东却稳如泰山旅行一定要学会随遇而安,淡然一点,走走停停,在旅行的路上感受不同的美景,感受中国速度的变迁,中国速度是我国发展的一个代名词,而又像是一个形容词,确实是这样!1020年前,选择在沿海所谓幸福,就是回家过年有钱没钱回家过年,欢迎你们回来!湖南省张家界的一位县长近日公开喊话在外打工的游子春节回家过年,获得点赞无数。尽管国内仍有零星地方发出建议非必要不返乡,但在疫情进入第四个年头之际,让散文轻挽流年时光,与冬相伴相安作者子墨十二月,拥有了季节的风景,迭新的日子,也是时光静美,安然清简。在冬日的时光里,清醒里内心的渴望,沉淀着岁月的沧桑,更是期待更多的美好。光阴的故事里,有着许多难以忘记的事情,美国再次出手,决定投入2000亿美元,但盟友们不乐意了!在半导体领域,美国一直都有着很大的野心,虽然EUV光刻机ARM架构和先进晶圆厂都不在美国本土,但美国凭借绝对领先的技术专利和主导的瓦森纳协定,牢牢地将全球顶尖技术拽在手中。所以美国女子站在大街上背影漂亮迷人,转过身后令人吃惊她已经60多了网上有这样一句话背影看迷倒千军万马,猛回头吓倒百万雄师。这句话虽然太夸张,生活中我们确实能遇到这样的情况。随着生活条件越来越好,很多人穿衣打扮也越来越随心所欲,在后面看是个妙龄少女小个子男生冬季帅气穿搭冬日生活打卡季冬季穿着厚重,对小个子来说真的不太友好,一不小心就成了显矮显胖的大粽子!那么冬季如何穿搭才能正确显高呢?短款厚外套就是最好的选择,长度建议到胯骨,这样才既不会长度尴尬行吟诗刊丨徐俊在张家界,大地的目光开始深邃覃文乐摄词语尽头是张家界清晨,金鞭溪以低语剥开薄雾那些跟着溪水流淌的事物被裹挟着横渡虚空谁坐在一片树叶上,顺流而下谁用溪水拨响峡谷的琴弦你颤栗,不知如何将思念还给大地我在山巅上吹着你许我一场相遇,我还你一世深情,你陪我一程,我爱你一生你许我一场相遇,我还你一世深情,你陪我一程,我爱你一生遇见你,让我心有所属,爱上你,为你一人独钟。无论四季如何流转,无论事态如何变换,无论容颜如何苍老,你都是我怦然心动的美好!我对这个冬季,福州各式花色等你来观赏!冬日的寒意促使人们穿上厚厚的冬衣,但榕城的景致并未因此暗淡。此时,秋景尚未完全消退,冬日花木也已凌寒绽放,为福州抹上一层层灵动的彩妆。榕城四季皆有景。这个冬季,公园街头近郊,各式时儿女成双!许昕成人生赢家,老婆漂亮贤惠,赞马龙是国乒梅西说起乒乓球领域的人民艺术家,很多人首先想到的就是许昕,大高个,手长腿长,爱笑,开朗活泼。今年32岁的许昕虽然比马龙还要小2岁,但从东京奥运会后就很少出现在国际赛场上,很多人都在猜测谁说虎毒不食子?亲手把郭美美推入深渊的始作俑者,是她亲妈7年前,由于和外籍男人私自开设赌场,郭美美被判了5年的刑期。那一年,她不过才23岁,正处于绽放的花季年龄。而这一次二进宫,她也不过刚满30岁,正是开花结果,扬帆起航的而立之年。然而
青云山生态绿色青山永泰青云山风景名胜区位于福建省福州市永泰县岭路乡与莆田市涵江区交界处,是国家级AAAA重点景区国家重点风景名胜区。青云山,因山峰平地拔起,矗立青云而得名。景区面积47平方公里,海拔三亚海上观音菩萨原身像迁移漠河北极村始末三亚海上观音原身像林海观音像。三亚海上观音菩萨原身像迁移漠河北极村始末。一许愿观音原身像1995年前后三亚宗教局申请建造供奉观音菩萨像,得到批准后,按当时的技术能力先建造一尊佛身高贵州六盘水市水城区观音山,3万多人的繁华小城如今就剩下100来人1955年,省工业厅接管水城铁厂,观音山开始进入人们的视野,观音山铁矿也成为水城铁厂的原料供应基地。水城铁厂,观音山铁矿两个项目同时开工,正当建设得如火如荼时迎来3年困难期,铁厂和游记散文游观音山记(景卫平)游观音山记作者景卫平家乡人把上观音山叫朝高山,足以看出此山的险峻高远和在人心里的位置。因观音山和秦岭第二主峰首阳山相毗邻,两山雄姿巍峨参差,其间九峰朝揖,绵延似海,林荫蔽日。风景野仙三中的那些古董都是真实存在的么在仙剑三中,有一个很有意思的搜集古董的系统,玩家在游戏历程中通过各种不同的途径收集古董,后期主角景天会有自己的古董房间放置这些珍藏品,收集齐全游戏中总共30个古董之后,还可以获得一今日原始征途新区猛龙过江火热开启,再现国战风云猛龙过江乘风破浪,新区来袭风云再起。原始征途十国新区猛龙过江今日1000已正式开启!原汁原味,还原征途经典万人同屏,热血国战荣耀!更有超多新区福利活动,助力战力飞升,成就征途王者!勇士官宣签约!库里成作家,勇士遭遇续约麻烦,威金斯恐成牺牲品头条创作挑战赛勇士队官方宣布,球队正式签下了后卫杰罗姆罗宾逊,至此勇士队大名单基本确定,勇士官方也表示,过些时候将会公布训练营成员名单。据报道,勇士为杰罗姆罗宾逊提供的是一份一年合十大元帅中,有且只有3人官至正国级,彭老总并不在其中说起十大元帅,那可是为新中国的开国元勋,他们在革命战争中的贡献非常高。从某种意义上来讲,十大元帅就是毛主席身边的左膀右臂,没有他们,就没有新中国。十大元帅中,有人擅长军事指挥,有人1947年,毛主席告别延安,为什么此后几十年,再未踏上延安土地?1947年,蒋介石调集大量兵力围攻延安,毛主席和群众不得不离开这片生活了13年的土地。临走前,毛主席鼓励大家我们要用一个延安换取整个中国。事实也如他所料,没多久,蒋介石的国民党军队9990元!五羊本田发布新款踏板NCR125,颜值动力配置都不错没有进行任何宣传预热,五羊本田突然发布了新款踏板NCR125,将目标顾客锁定在都市通勤市场。这类车友除了追求舒适省心稳定耐用经济实惠之外,对颜值审美也有一定需求,于是当看到新车具有新车售12。99万元,拉低准入门槛,欧拉好猫新增两周年轻享型文懂车帝原创曹浩懂车帝原创产品日前,我们从官方获悉,欧拉好猫莫兰迪版新增上市两周年轻享型,补贴后售价为12。99万元。新车将会成为最新入门车型,外观提供多种颜色可选,但内饰将只提供