笔记:C#_数据结构_集合_双向链表:LinkedList

售船商

双向链表: LinkedList★★★
在这里插入图片描述升级版:堆栈+队列
优点:插入、删除元素效率较高,
允许插入重复值
缺点:访问查询效率较低
返回:船坞
公告牌:双向链表:(LinkedList)
链表的一种,也叫双链表。
它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。
所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

操作指南

售船商:我来为您介绍一下!
您或许已经拥有了Array,ArrayList和List,不过它们都有一个重大的缺陷!
那就是从数组的中间位置删除或插入一个元素需要付出很大的代价
其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。
Hades:我可以这样理解吗?
就是说,乘坐那些船有个死规则,舱位中间不允许有空房间,一旦中间有人搬走,后面所有人必须全部向前挪动一个房间,这个动作,真是牵一发动全身!
售船商:没错,如果不想遵守这个规则,可以,您就要了解下LinkedList了。
LinkedList(底层是由链表实现的)是基于链表的数据结构,
很好的解决了数组删除插入效率低的问题,
且不用动态的扩充数组的长度。
Hades心想:
有这等好事?!那我愿闻其详。
售船商:没有能解决一切问题的船,选什么船要看你的实际场景。
List是数组链表
LinkedList是指针链表
选择List还是LinkedList要看你的使用特点.
数组链表访问快,复杂度O(1),但是添加删除复杂度O(n)
指针链表访问复杂度是O(n),但是添加删除很快O(1)
Hades:
你这样说我又晕了,能不能说得简单点。
售船商:这样吧,首先我来介绍一下这艘船的优点。
如果要插入一个元素到链表的中间位置,会非常的快,
原因是,如果插入,
只需要修改上一个元素的Next与下一个元素的Previous的引用即可。
Hades:你的意思是,
如果一批船员上船,每个人都已经记住了自己的前面和后面排的分别是谁。
接着,大家随意分房间,如果有新船员上了船,只需要告知另外两个队员这个新来的名字即可。
售船商:对,那么下面我来介绍一下这艘船的缺点。
链表只能是一个接着一个的访问,
这样就要用较长的时间来查找定位位于链表中间的元素。
换言之:我必须挨家挨户的敲门才能知道里面到底是谁。
Hades:我能这样理解吗?
这船安排座次很方便,因为它的规则就是,我永远只关注自己前后的两位兄弟,其他一律不管。然而,我要想知道船上都住了谁,那就很麻烦,必须敲开所有兄弟的门,对吧?
售船商:是这样的。您真是一位睿智的船长!
让您来销售这艘船,我想销量一定超过我了。

属性

属性说明
Count返回链表中的元素个数
First返回链表中的第一个节点
Last返回最后一个节点

方法:查找

船长:所有船员上船后,我只能看见船首和船尾的两个人,其余人都在自己的船舱内,我要通过这两个人去找到其他人。

方法搜索元素
Contains()搜索某元素,找到返回TRUE,否则返回FALSE
Find()从链表头开始找某元素,并返回他的节点类,LinkedListNode<T>
FindLast()与Find()类似,不同的是从尾部开始搜索

方法:添加

Add方法添加元素
AddBefore()在某节点的前面
AddAfter()在某节点的后面
AddFirst()在链表的头部
AddLast()在链表的尾部
Add 上船:登船演练

方法:删除

Remove方法删除元素
Remove()删除指定的一个匹配对像
RemoveFirst()删除链表的头部元素
RemoveLast()删除链表的尾表元素
Clear()清除所有的元素
Remove 伤亡:登船演练

方法详解:动态更新

返回:船坞

泰坦的肩膀

旋涡:LinkedList详解及源码学习

旋涡:C#中链表的用使用LinkedList

旋涡:C#LinkedList链表

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值