一、数组
1、特点
(1)数组的长度是固定的,也就是说存储的元素的个数是确定的,数组的大小一旦确定就不能更改了。
例如:定义一个能存储三个元素的数组,当存储第四个元素的时候会出现错误。
(2)数组是引用数据类型
(3)数组中存储的数据的数据类型一定要一致
(4)在内存中占用连续的内存空间,因此,数组不能定义的太大
(5)访问方式:直接访问
(6)存储密度等于1
2、优点
(1)访问快,时间复杂度为O(1)
3、缺点
(1)插入和删除的时候需要移动大量的元素,效率较低
(2)数组的长度固定
(3)内存必须连续
(4)所有元素数据类型必须相同
二、链表
1、特点
(1)链表类型众多,有单向链表、双向链表、循环链表,每一个结点由两部分组成,
(2)存储上:不一定占用连续的空间,且不需要事先分配空间,元素个数不确定
(3)访问方式:顺序访问
(4)存储密度小于1(分为数据域和指针域)
2、优点
(1)增删快,时间复杂度为O(1)
3、缺点
(1)只支持顺序访问,时间复杂度为O(n)
(2)存储密度小,存储密度小于1,而顺序表的存储密度等于1
三、散列表(哈希表)
1、冲突
将六个元素放到容量为七的数组中的时候,虽然数组的容量大于元素的个数,但是,经过哈希函数计算后可能有多个元素映射到同一个位置,这就是冲突,冲突不能避免,但是可以减少冲突的发生。
常用的哈希函数有:除留余数法、二次探测法、链地址法等
2、链地址法
基本思想:相同哈希地址(根据哈希函数得出)的记录链成一单链表,m个哈希地址就设m个单链表,然后用用一个数组将m个单链表的表头指针存储起来,形成一个动态的结构
链表长度达到8并且元素的个数超过64时,将变为红黑树。
3、特点
(1)由哈希值不能得出原始数据
(2)相同的数据哈希值相同
(3)哈希算法的冲突要尽可能小
4、优点
提高了插入(虽然是基于数组的,但是插入的时候直接根据函数确定插入的位置,不需要移动其他元素)和查询的效率(理想条件下是O(1),当链表教程的时候性能就会下降)
5、缺点
(1)基于数组的,数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重,是先要确定存储的数据量
(2)也没有一种简便的方法可以以任何一种顺序〔例如从小到大〕遍历表中数据。
总结: