数据结构与算法——第2章-静态链表、动态链表的区别(2.6.3)

一 概述

1
2
3
本文对比了静态链表和动态链表在存储数据方面的特点,
静态链表需预先分配固定空间且不能扩展,使用备用链表记录空间位置;
动态链表则支持动态内存分配,存储元素个数不限,操作更灵活

二 动态、静态链表存储结构

一、链表存储结构(动态链表)

二、同样是存储上图中的数据{1,2,3},使用静态链表存储数据的状态如下

静态链表和动态链表的共同点:数据之间 "一对一" 的逻辑关系都是依靠指针(静态链表中称 "游标")来维持

三 静态链表

1
2
3
4
5
6
7
8
9
10
使用静态链表存储数据需预先申请足够大的一整块内存空间,
静态链表存储数据元素的个数从其创建的那一刻就已经确定,后期无法更改。
如果创建静态链表时只申请存储 10 个数据元素的空间,
那么在使用静态链表时,数据的存储个数就不能超过 10 个,否则程序就会发生错误。

不仅如此,静态链表是在固定大小的存储空间内随机存储各个数据元素,
这就造成了静态链表中需要使用另一条链表("备用链表")来记录空间存储空间的位置,
以便后期分配给新添加元素使用,如上图所示。

如果选择使用静态链表存储数据,则需要通过操控两条链表,一条是存储数据,另一条是记录空闲空间的位置

四 动态链表

1
2
3
4
使用动态链表存储数据,不需要预先申请内存空间,而是在需要时才向内存申请;动态链表存储数据元素的个数不限。

使用动态链表的整个过程也只需操控一条存储数据的链表。
当表中添加或删除数据元素时,只需要通过 malloc 或 free 函数来申请或释放空间即可,实现起来比较简单。

五 参考

  • CSDN—静态链表、动态链表的区别