静态链表和动态链表(静态链表和动态链表的优缺点)

静态链表和动态链表

简介

链表是一种非连续存储数据的线性表结构。它由一系列结点组成,每个结点存储着数据和指向下一个结点的指针。链表分为两类:静态链表和动态链表。

静态链表

定义

静态链表是一种链表,其中结点的内存空间在程序运行前就分配好,并且结点的位置是固定的。

特点

结点个数固定,无法动态增加或减少

结点间的关系是通过指针来表示的

空间利用率低(可能存在很多空闲结点)

插入或删除结点时需要移动指针,时间复杂度较高

动态链表

定义

动态链表是一种链表,其中结点的内存空间在需要时动态分配,并且结点的物理位置可以动态变化。

特点

结点个数可动态增加或减少

结点间的关系是通过指针来表示的,但指针指向的结点可能在内存中移动

空间利用率高,内存只分配给实际需要的结点

插入或删除结点时只需要修改指针,时间复杂度低

比较

| 特征 | 静态链表 | 动态链表 | |---|---|---| | 结点分配 | 运行前分配好 | 运行时动态分配 | | 空间利用率 | 低 | 高 | | 插入/删除时间复杂度 | 高 | 低 |

应用

静态链表:适合结点个数固定或变化较小的场合,例如编译器中的符号表

动态链表:适合结点个数动态变化较大的场合,例如栈、队列、图的邻接表等

**静态链表和动态链表****简介**链表是一种非连续存储数据的线性表结构。它由一系列结点组成,每个结点存储着数据和指向下一个结点的指针。链表分为两类:静态链表和动态链表。**静态链表****定义**静态链表是一种链表,其中结点的内存空间在程序运行前就分配好,并且结点的位置是固定的。**特点*** 结点个数固定,无法动态增加或减少 * 结点间的关系是通过指针来表示的 * 空间利用率低(可能存在很多空闲结点) * 插入或删除结点时需要移动指针,时间复杂度较高**动态链表****定义**动态链表是一种链表,其中结点的内存空间在需要时动态分配,并且结点的物理位置可以动态变化。**特点*** 结点个数可动态增加或减少 * 结点间的关系是通过指针来表示的,但指针指向的结点可能在内存中移动 * 空间利用率高,内存只分配给实际需要的结点 * 插入或删除结点时只需要修改指针,时间复杂度低**比较**| 特征 | 静态链表 | 动态链表 | |---|---|---| | 结点分配 | 运行前分配好 | 运行时动态分配 | | 空间利用率 | 低 | 高 | | 插入/删除时间复杂度 | 高 | 低 |**应用*** 静态链表:适合结点个数固定或变化较小的场合,例如编译器中的符号表 * 动态链表:适合结点个数动态变化较大的场合,例如栈、队列、图的邻接表等

标签列表