- 链表与数组
-
数组静态分配内存,链表动态分配内存;
-
数组在内存中连续,链表不连续;
-
数组元素在栈区,链表元素在堆区;
-
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
-
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。
-
堆、栈、队列
① 堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
② 栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。(后进先出)
③ 队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。(先进先出)
-
链表的删除、插入、反向
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
typedef struct