单链表:
链表是动态分配内存在内存中不连续,单链表只有一个向下的指针,指向下一个节点,单链表的定位时间复杂度是O(n),插入删除的时间复杂度是O(1)node
双链表:
链表是动态分配内容在内存中不连续,单双链表一致,双链表有两个指针prov,next ,prov指向上一个节点,next指向下一个节点,理论上一样的数据量双向链表的查询速度比单链表快,双向链表能够使用二分查找法,最多查找一半的元素就可获得目标,单链表须要遍历整个链表对象。数组
数组:
数组静态分配内存,在内存中连续指针
数组的优势
数组的缺点
- 插入和删除效率低(插入和删除须要移动数据)
- 可能浪费内存(由于是连续的,因此每次申请数组以前必须规定数组的大小,若是大小不合理,则可能会浪费内存)
- 内存空间要求高,必须有足够的连续内存空间。
- 数组大小固定,不能动态拓展
链表的优势
- 插入删除速度快(由于有next指针指向其下一个节点,经过改变指针的指向能够方便的增长删除元素)
- 内存利用率高,不会浪费内存(能够使用内存中细小的不连续空间(大于node节点的大小),而且在须要空间的时候才建立空间)
- 大小没有固定,拓展很灵活
- 不须要初始化容量,能够任意加减元素
- 添加或者删除元素时只须要改变先后两个元素结点的指针域指向地址便可,因此添加,删除很快
链表的缺点
- 不能随机查找,必须从第一个开始遍历,查找效率低
- 由于含有大量的指针域,占用空间较大