数据结构总结---------线性表

1.顺序表(数组)

由于讨论的是线性表所以会与链表进行增删改的对比

1.1 增加

  1. 当每次的加入都是在末尾时:速度很快
  2. 当插入的位置不在末尾时(不管是否知道下标的情况下):速度相对链表来说是慢的
    为什么?因为插入到对应的位置后,后续的元素都需要往后移动

1.2 删除

  1. 当每次删除都是末尾元素时:速度很快
  2. 当删除的元素不在末尾时(不管是否知道下标的情况下):速度相对链表来说是慢的
    为什么?因为删除后,后面的元素都需要往前移动

1.3 更改

  1. 当每次更改元素时(不管是否知道下标的情况下):速度相对链表来说是快的
    为什么?链表的空间不是连续的而数组是,且如果通过下标的方式修改数组会更快

1.4 查询

  1. 知道下标的情况下:会比链表快很多
    为什么?因为链表想找到那个元素只能从头开始遍历
  2. 不知道下标的情况下:也会比链表快
    为什么?因为链表空间不是连续的

2.链式存储结构(链表)

2.1 增加

相对数组来说,是快的,因为链表存储结构并不是连续的,而是一个类指定,所以他不管增加到哪个位置都不需要像数组那样向后移元素,只需要改变指定的对象即可

2.2 删除

相对数组来说,是快的,因为删除一个元素时不会发生元素后移的现象

2.3 更改

相对数组来说会慢,因为是非连续的空间,找到修改的值需要从头开始遍历才能找到想修改的那个空间

2.4 查找

相对数组来说是慢的,因为非连续的空间和需要从头遍历查找

2.5 空间

由于创建时需要多指定一个空间,所以从这个方面来讲是浪费空间的,但是数组的创建是固定不变的所以会存在空间的浪费现象,而链表则没有浪费现象,从这方面来讲就是节省空间的

2.6 链表结构的讨论

1.图解链表结构
在这里插入图片描述
2.头指针概念

  • 在线性表的链式存储结构中,头指针是指链表指向第一个结点的指针,若链表有头结点,则头指针就是指向链表头结点的指针。
  • 头指针具有标识作用,故常用头指针冠以链表的名字。
  • 无论链表是否为空,头指针均不为空。头指针是链表的必要元素。

3.头结点

  • ==结点的存在使得空链表与非空链表处理一致=,也方便对链表的开始结点的插入或删除操作。
  • 首元结点也就是第一个元素的结点,它是头结点后边的第一个结点。
  • 头结点不是链表所必需的。

总结 :在业务场景需要大量查询和修改操作时我们可以优先考虑数组,但是当需要大量增加和删除操作时我们可以考虑链表的数据结构。而链表中的头指针主要用于标识整个数组,而头结点则是主要用于避免空链表与非空链表处理不一致的问题

版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!

https://me.csdn.net/qq_39657909

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页