在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 memberstagged unions

阅读一些Introduction to AlgorithmsS-expressions(也许关于ASTs)。

另一答案

你可以把它变成通用的。代替

int value;

你的结构可以容纳

void* data;

然后我想在堆上为它动态分配空间。

另一答案

距其他好答案添加评论4分......所以我希望别人会接受我的道歉......

Python允许“列表类型的对象”嵌入到列表中并且没有要求“矩形”的说明,这使得这非常简单。 C使它非常手动。

我之前使用过这种方法来实现一般格式XXXXXYYYY的“非常多整数的哈希集”。我声明了一个10000个指向结构的固定数组来表示YYYY部分并动态分配链接来表示XXXXX部分......非常快速地搜索特定元素。

在你的情况下,你可以做同样的事情,甚至列表中的列表(如雪花的武器),但指针管理将是艰巨的。不是因为你有任何技术水平,而是因为“*”(2和3及以上)的位置必须正确...如果你的代码不精确,C编译器会猜测你的意思。即使是经验丰富的C编码员也认为这项工作充满挑战。

以上是关于在C中实现非矩形数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中实现这个结果?指向数组的数组

如何在iOS中实现矩形UIButton到圆形的漂亮动画?

使用 FILE* 和结构数组在 C 中实现责任链

在片段中实现对话框时,必须在添加内容之前请求窗口功能

解释'空'C数组(int a = {};)

如何在F#任务计算表达式的每一步上实现非嵌套异常处理?