第一个问题是:“如何在 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/