为什么线性表动态分配就可以动态扩展空间

两个初始化代码:

静态分配就是当线性表长度length达到MaxSize时无法再存储元素,导致溢出;而动态分配在length>=MaxSize时会动态扩展存储空间。
从图中的两段初始化代码并没有写 扩展空间的内容,一般来说,动态扩展空间的逻辑会出现在插入函数当中,在C语言里会使用realloc来进行扩展.
那为什么图中的第一段代码就无法再扩展了呢?
因为使用了数组这一类型,数组在C中是在初始化长度后就无法再更改的,因此即使length达到了MaxSize,系统也没法给你额外分配存储空间。而动态分配使用malloc函数分配了一个初始化大小的内存块,在表满时,会使用 realloc 函数重新分配一个更大的内存块,并将原有数据复制到新的内存块中,如此便不会出现满的情况。
总结,因为静态分配使用了数组,而数组的一个特性就是长度不可以变。
如何思考得出这个答案?两段代码分别使用了什么函数,有什么特性...
附:插入算法

tips:这是静态分配的插入操作,如果是动态分配的话需要将红框内换成“使用realloc分配新内存-更新基地址-复制数据到新内存-free释放旧内存空间”的步骤

posted on 2025-02-06 16:23  VoidHan21  阅读(20)  评论(0)    收藏  举报