首先了解线性表,顾名思义就是线性表数据排成像一条线一样的结构。每个线性表上的数据组最多只有最多只有前后两个方向。常见的线性表结构由数组,链表,队列,栈等线性结构。
而它的相对结构就是非线性表。比如二叉树堆,图,非线性中的数据并不是简单的前后关系。
链表和数组的区别:
从底层结构看数组需要一块连续的内存空间来存储,对内存的要求比较高,而且数据在进行插入删除时候需要大量的数据迁移,复杂度为O(n),而链表对内存要求较低,因为链表不需要连续的内存空间。插入和删除只需要考虑相邻接结点指针的改变,复杂度为O(1),但由于数组大小是固定的,已经声明就要占用连续的内存,且不能扩展,所以就有了链式存储结构。
链表 VS 数组性能
不过,数组和链表的对比,并不能局限于时间复杂度。而且,在实际的软件开发中,不能仅仅利用复杂度分析就决定使用哪个数据结构来存储数据。
数组简单易用,在实现上使用的是连续的内存空间,可以借助 CPU 的缓存机制,预读数组中的数据,所以访问效率更高。而链表在内存中并不是连续存储,所以对 CPU 缓存不友好,没办法有效预读。
链表的理解:因为链表不需要使用地址连续的存储单元,而是通过“链” 建立起数据元素之间的逻辑关系,因此插入删除时不需要移动元素,只需修改指针。
链表的分类:单链表,双链表,循环链表(单双),静态链表。
关于链表的基本操作会在之后继续分享(*^▽^*)。