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

标签 c arrays

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

相关文章:

c - 你将如何在 z3 中实现指针的取消引用

arrays - 更改数组内 var 的编号,不会更改 var 结果本身吗?

mysql - 从数组中获取数据并将其保存在数据库中

java - 使用参数创建此构造函数类

c - 使用 C 在 pic 程序存储器中存储在数组中的字符串中添加特定值

c++ - 将 Tcl 中命令的输出重定向到文件时,文件以 DOS 格式生成

python - 使用 Python 解析 IFF 样式数据

c# - 扩展数组的最快方法

php - 你能有一个设置为数组的 PHP $_POST 变量吗?

c - 如何用C实现XOR加密从客户端发送数据到服务器