线性表就是数据排成像一条线一样的结构。数据表中的就是按插入顺序进行排序
数组
数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
优点:访问速度快, 因为是连续储存的数据,通过数组第一位数据地址进行下标运行就可以得到数据
缺点: 需要连续的内存空间,大小固定,如果有多余的数据就无法插入, 插入,删除操作慢,因为是连续储存的,使用如果要删除或插入一个数据, 就需要数据搬运
链表
链表是将数据连续储存的一个数据结构,通过第一位数据记录第二位数据的地址来进行实现的数据结构
优点: 不需要连续的内存空间,大小不是固定的,可以无限添加数据,插入,删除操作比较快,
缺点: 数据存储空间比较大,因为不仅需要存储数据,还要存储下一位数据的地址,查询慢,不能对地址进行偏移,
链表中有单链表(单向链表),双链表(双向链表),单循环链表, 双循环链表
单向链表
链表中的数据存储下一个数据的地址,到最后一个数据的时候,存储地址的值就为None
单向循环链表
链表中的数据存储下一个数据的地址,到最后一个数据的时候,存储地址的值就为第一个的地址
双向链表
链表中的数据中不仅存储了下一个数据的地址,还存储了上一个数据的地址, 第一个数据的上一个地址为None, 最后一个数据存储的下一个地址为None
双向循环链表
链表中的数据中不仅存储了下一个数据的地址,还存储了上一个数据的地址, 第一个数据的上一个地址存储了最后一个数据的地址, 最后一个数据存储的下一个地址存储了第一个数据的地址
链表应用: 栈,队列
栈——先进后出
队列——先进先出
散列表
概念
散列表也相当于是一个正常的列表,不过,在添加的时候通过特殊算法将数据算出这个数据存储的位置
使用:如果判断一个数据是否在这个列表中,,可以将这个数据进行 算法运算,得到这个数据存储的位置,然后获取列表的下标的数据, 然后进行判断,这样就可以很快速
冲突
在算法运行时,可能会出现两个不同的数据算出相同的下标,这时候就是冲突了, 如何解决冲突呢,可以使用两种方法:
开放寻址法
链表法
开放寻址法
如果出现冲突了,那么就将下标加一,如果加一后的列表位置没有数据的话,那么就进行插入
链表法
当发生冲突时,将第二个数据挂载到第一个数据的next上,这样就可以避免冲突了