数据结构----集合--链表
数据结构主要的两点
时间复杂度,怎么让程序运行得更快。越快越好
空间复杂度怎么能占用内存空间更少
程序的健壮性有些程序根本容易出错的,不稳定
****就是不用他的,自己理解原理,自己写,用自己的
链表的概念
集合就是一链表为基础创建的
数组作为数据存储结构的缺陷
- 在无序数组中,搜素效率是低效的
- 而在有序数组中插入效率又很低
- 不管在哪一个数组中,删除效率都很低
- 创建数组后,它的大小又是不可变的
链表
- 链表可以是一种有序或无序的链表
- 链表中的内容通常存储在内存中分散的位置上
- 链表由节点组成,每一个节点的结构都相同
- 节点分为数据域和链域,数据域是存放节点的内容,链域是存放指向下一个节点地址的指针
用编程思想来理解链表以及节点的关系
- 一个链表有许多类似的节点,所以必须要用一个描述节点来表达节点,这个节点我们成为Node
- 每个Node对象中包含一个表示该节点内容的数据部分,我们称之为数据域,和一个对下一个节点引用字段next,即链域
链表概念图
下一个节点类型又是Node,是Node类类型,所以这又是一个递归,知道Node为Null,则递归结束【自引用】
在正常的应用程序中,可以用一个包含多个数据的类的对象来代替数据项
链表的基本操作【单链表】
建表
-
也称为初始化
- 其作用就是建立一个空表,L=null,即建立量表的“表架构”,但不包括任何数据元素
- 链表的第一个节点也称为头节点,头节点的结构和普通节点一样,通常我们会在链表初始时指定
- 链表中最后一个节点为空节点,在程序中表示为null,也是为了表示借点结束的标识,每一个节点都是一个对象,目的是为了避免抛出空指针异常
- 编程判断要先判断null再判断equals,这两个不一样的。
求表长
求链表长度,就是有几个节点读链表节点
就是遍历链表
添加节点
插入一个新节点
删除节点
删除指定节点
计算机其实不删东西的,只是把指针移走,所以以前说什么硬盘恢复,大体就是这样的,所以通过正常的索引啊,目录啊找不到他了
但是得是刚删的时候,做了别的操作,很可能就给他覆盖掉了,目录就像链表
按序号查找
定位
就是查找
其他链表
循环链表
双链表