数组还是链表?

WuYL7812 2010-03-29 09:37:56
要存储一些重要数据,数据大小编译时还不知道,0-32m之间,统计平均起来略小于16m,每比数据大小64bytes,这些数据不需要查找,用32m的数组,还是单链表呢?哪个最节约内存?
大家踊跃发言,我取得票多者
...全文
539 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
风子II 2010-03-29
  • 打赏
  • 举报
回复
为了通用和扩展,建议用分级索引和动态数组结合,否则不管是数组还是链表,做起增删改查都是很耗性能的。
dubiousway 2010-03-29
  • 打赏
  • 举报
回复
不喜欢链表。呵呵
fairywell 2010-03-29
  • 打赏
  • 举报
回复
再看了下lz要求,链表可以,如果要求更好的时空效率,可以考虑动态数组,如ls朋友说的,采取按块分配的方法,一次 malloc 一块。
vc_player 2010-03-29
  • 打赏
  • 举报
回复
鄙人见解,这种情况我似乎用链表多点。。
毕竟数据个数不太清楚,用数组的话一开始就得开辟一大块空间才行。。
而且,用链表的话,数据的查找和删除明显会方便很多~O(∩_∩)O
cy330206 2010-03-29
  • 打赏
  • 举报
回复
楼主可以去试试链表。。
hartharthart 2010-03-29
  • 打赏
  • 举报
回复
支持动态数组
bsr2009 2010-03-29
  • 打赏
  • 举报
回复
赞成链表。呵呵
bobo364 2010-03-29
  • 打赏
  • 举报
回复
单链表其实也省不了多少内存,搞个大数组也耗不掉多少内存,现在电脑的内存搞个1万个int元素的数组,小菜一碟
WuYL7812 2010-03-29
  • 打赏
  • 举报
回复
添加删除操作不多,按照保存先后顺序列出数据即可
cattycat 2010-03-29
  • 打赏
  • 举报
回复
平均16m,用32m的数组显然比较浪费了。用链表吧,但为了性能,分配链表节点不要频繁malloc,最好自己实现一个一次分配大一点的内存,把这些大的块链起来。
superlee19 2010-03-29
  • 打赏
  • 举报
回复
这些数据不需要查找,你存贮它们用来做甚?
如果存在很频繁的添加删除操作,建议用链表
如果存在很频繁的查找,排序,建议用数组或其他数据结构

你这个情况建议你什么都不要做
win32环境,普通的应用程序,是使用30M还是50M,区别不大,这种情况下用不着对内存斤斤计较
使用哪种容器具体要按照应用的目的来确定
kevinyujm 2010-03-29
  • 打赏
  • 举报
回复
对确定大小的数据,用链表。无论是程序逻辑,还是程序维护出发,都应该这样做。
chieh1213 2010-03-29
  • 打赏
  • 举报
回复
应该是链表比较好
fairywell 2010-03-29
  • 打赏
  • 举报
回复
没仔细看lz的要求,但如果插入删除操作少,可以选择数组,空间占用小,而且可以随机存储;否则用链表
筷子哥 2010-03-29
  • 打赏
  • 举报
回复
说实话,楼主用std::list更好。
用数组的话显然有浪费,因为你必须按照最大的内存用量提前定义。
用链表的话因为是根据来的数据进行动态创建的,内存用量应该优于数组。
链表在内存上的消耗主要是每一笔4个字节的指针(32位)
你看看这个消耗大,还是数组浪费的空间大。
huanmie_09 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyl7812 的回复:]
大家注意,我的代码是在win32上运行的
[/Quote]
win32上没问题啊,sizeof(int)这个值跟编译器有关的。
用链表34M的内存楼主还是耗得起的吧。
itxuls 2010-03-29
  • 打赏
  • 举报
回复
链表。。。
WuYL7812 2010-03-29
  • 打赏
  • 举报
回复
大家注意,我的代码是在win32上运行的
zhangzhanwenzzzzzz 2010-03-29
  • 打赏
  • 举报
回复
不清楚,呵呵才看到链表。。。。。
huanmie_09 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yuzl32 的回复:]
不需要查找,数据大小又不知道,还是用链表存储吧。
[/Quote]
up!
用数组存储的话,最多需要的节点个数:32*1024*1024/64=524288.
楼主需要注意,编译器的sizeof(int)=2的话,下标已经超出了int型数所能表示的范围.
另外,7楼已经计算出了用链表大约增加多少内存。
原先最大的存储量32M,化作链表最大存储量为:524288*(64+4)/1024/1024=34M
加载更多回复(26)

69,396

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧