数据结构总结---------线性表
1.顺序表(数组)
由于讨论的是线性表所以会与链表进行增删改的对比
1.1 增加
- 当每次的加入都是在末尾时:速度很快
- 当插入的位置不在末尾时(不管是否知道下标的情况下):速度相对链表来说是慢的
为什么?因为插入到对应的位置后,后续的元素都需要往后移动
1.2 删除
- 当每次删除都是末尾元素时:速度很快
- 当删除的元素不在末尾时(不管是否知道下标的情况下):速度相对链表来说是慢的
为什么?因为删除后,后面的元素都需要往前移动
1.3 更改
- 当每次更改元素时(不管是否知道下标的情况下):速度相对链表来说是快的
为什么?链表的空间不是连续的而数组是,且如果通过下标的方式修改数组会更快
1.4 查询
- 知道下标的情况下:会比链表快很多
为什么?因为链表想找到那个元素只能从头开始遍历 - 不知道下标的情况下:也会比链表快
为什么?因为链表空间不是连续的
2.链式存储结构(链表)
2.1 增加
相对数组来说,是快的,因为链表存储结构并不是连续的,而是一个类指定,所以他不管增加到哪个位置都不需要像数组那样向后移元素,只需要改变指定的对象即可
2.2 删除
相对数组来说,是快的,因为删除一个元素时不会发生元素后移的现象
2.3 更改
相对数组来说会慢,因为是非连续的空间,找到修改的值需要从头开始遍历才能找到想修改的那个空间
2.4 查找
相对数组来说是慢的,因为非连续的空间和需要从头遍历查找
2.5 空间
由于创建时需要多指定一个空间,所以从这个方面来讲是浪费空间的,但是数组的创建是固定不变的所以会存在空间的浪费现象,而链表则没有浪费现象,从这方面来讲就是节省空间的
2.6 链表结构的讨论
1.图解链表结构
2.头指针概念
- 在线性表的链式存储结构中,头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。
- 头指针具有标识作用,故常用头指针冠以链表的名字。
- 无论链表是否为空,头指针均不为空。头指针是链表的必要元素。
3.头结点
- ==结点的存在使得空链表与非空链表处理一致=,也方便对链表的开始结点的插入或删除操作。
- 首元结点也就是第一个元素的结点,它是头结点后边的第一个结点。
- 头结点不是链表所必需的。
总结 :在业务场景需要大量查询和修改操作时我们可以优先考虑数组,但是当需要大量增加和删除操作时我们可以考虑链表的数据结构。而链表中的头指针主要用于标识整个数组,而头结点则是主要用于避免空链表与非空链表处理不一致的问题
版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!