在C中实现非矩形数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C中实现非矩形数组相关的知识,希望对你有一定的参考价值。
我试图在C中实现一个非矩形的多维数组,即:
[1, 2, [3, [4, 5, [6]]], 7]
截至目前,我正在使用这样的树:
enum item_type { ELEMENT, ARRAY };
struct item {
int value;
struct item *next;
enum item_type type;
};
这可以以某种方式简化或改进吗?
编辑:更多地澄清这个练习的一部分,以“翻译”来自更高级语言的一些概念,例如以下python代码:
array = [1, 2, [3, [4, 5, [6]]], 7]
abstract data types的原因。也许你的东西更像是一个tree(或者可能是一个DAG)而不是一个数组。
首先,详尽地(在纸面上)定义非矩形“数组”上的所有操作(我对它们没有确切的想法,因为你的问题很模糊)。更多地考虑如何创建,访问和修改您的东西。
然后实现该抽象数据类型。有关更简单的示例(矩阵),请参阅this。也许你可以使用flexible array members和tagged unions。
阅读一些Introduction to Algorithms和S-expressions(也许关于ASTs)。
你可以把它变成通用的。代替
int value;
你的结构可以容纳
void* data;
然后我想在堆上为它动态分配空间。
距其他好答案添加评论4分......所以我希望别人会接受我的道歉......
Python允许“列表类型的对象”嵌入到列表中并且没有要求“矩形”的说明,这使得这非常简单。 C使它非常手动。
我之前使用过这种方法来实现一般格式XXXXXYYYY的“非常多整数的哈希集”。我声明了一个10000个指向结构的固定数组来表示YYYY部分并动态分配链接来表示XXXXX部分......非常快速地搜索特定元素。
在你的情况下,你可以做同样的事情,甚至列表中的列表(如雪花的武器),但指针管理将是艰巨的。不是因为你有任何技术水平,而是因为“*”(2和3及以上)的位置必须正确...如果你的代码不精确,C编译器会猜测你的意思。即使是经验丰富的C编码员也认为这项工作充满挑战。
以上是关于在C中实现非矩形数组的主要内容,如果未能解决你的问题,请参考以下文章