【 C 】经典抽象数据类型(ADT)之内存分配

举报
李锐博恩 发表于 2021/07/15 07:59:56 2021/07/15
【摘要】 C中的一些抽象数据类型(ADT)如链表、堆栈、队列和树等,链表已经在前几篇博文有所讨论,见: 【 C 】在单链表中插入一个新节点的尝试(一) 【 C 】在单链表中插入一个新节点的尝试(二) 【 C 】在双链表中插入一个新值的简明程序 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化) 后面的博文会相继讨论堆栈、队列和树的一些基本的相关知识! ...

C中的一些抽象数据类型(ADT)如链表、堆栈、队列和树等,链表已经在前几篇博文有所讨论,见:

【 C 】在单链表中插入一个新节点的尝试(一)

【 C 】在单链表中插入一个新节点的尝试(二)

【 C 】在双链表中插入一个新值的简明程序

【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)

后面的博文会相继讨论堆栈、队列和树的一些基本的相关知识!


下面记录一个最基本的问题,内存分配问题:

所有的 ADT 都必须明确一个问题,如何获取内存来存储值,前面提到的链表,包括单链表和双链表都是通过动态内存分配来存储链表值的,事实上,方法不止于此,还有静态数组和动态分配的链式结构!

静态数组和动态分配的数组都比较好理解,也比较相似,最后一个动态分配的链式结构需要下点功夫。(个人认为如此!)

下面分别简单介绍:

静态数组要求结构的长度固定。而且,这个长度必须在编译时确定。但是这个方案最为简单,而且最不容易出错。

动态数组,可以在运行时才决定数组的长度。而且,如果需要的话,你可以通过分配一个新的、更大的数组,把原来数组的元素复制到新数组中,然后删除原先的数组,从而达到动态改变数组长度的目的。在决定是否采用动态数组时,你需要在由此增加的复杂性和随之产生的灵活性(不需要一个固定的、预定确定的长度)之间作一番权衡!

动态分配内存的相关博文:

【 C 】动态内存分配案例分析

【 C 】关于学习 realloc 踩过的那些坑

【 C 】动态内存分配实用案例(一)之读取、排序和打印一列整形值

【 C 】动态内存分配实用案例(二)之复制字符串

最后,链式结构提供最大程序的灵活性。每个元素在需要时才单独分配,所以除了不能超过机器的可用内存之外,这种方式对元素的数量几乎没有什么限制。但是链式结构的链接字段需要消耗一定的内存,在链式结构中访问一个特定元素的效率不如数组。

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/82725645

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。