gpt4 book ai didi

c - C 中的稀疏数组!如何实现?我可以只分配数组的一部分吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:14 25 4
gpt4 key购买 nike

第一个问题是:“我如何在 C 中做一个简单的稀疏数组(只有一维)?” {用我自己的双手,没有图书馆。}

最后一个:“我可以只分配数组的一部分吗?”

像*数组;

然后使用malloc为此分配一些内存;所以,我们释放不需要的索引。

我可以吗?

非常感谢!

最佳答案

不,你不能这样做。

你能做的就是分配 block ,但你需要仔细设计。

可能最好的优化是使用单元格范围。因此,您可以使用可用范围的链表(或 map ):

struct SparseBlock
{
void *blockData;
int beginIndex;
int endIndex;
struct SparseBlock *next;
}

很明显,如果 endIndex - beginIndex = 0 你有一个单元格(在数组中被隔离),否则你有一个单元格 block ,允许你分配正确数量的内存

这种方法对于不可变的稀疏 vector 很简单,否则你应该注意

  • 每当填充或生成孔时重组 block
  • 只存储单个细胞

另外你必须决定如何索引这些 block ,你可以让它们在一个链表中排序,或者你可以使用一个映射有一个常数 O(1) 的时间来检索第 n 个 block (当然如果它是一个范围或将索引减少到可用的最近的较低索引,则必须为同一 block 插入许多相同的键。

解决方案很多,发挥你的创意吧! :)

关于c - C 中的稀疏数组!如何实现?我可以只分配数组的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2472608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com