C-矩阵作为链表的表示
我有以下数据结构: 将矩阵表示为链表的 我需要在底部添加一个新的矩阵行,并用零初始化该列表的值 问题:是否可以为每个节点使用带有两个链接的单独列表?这样,我们可以在底部添加一个带有水平指针(链接)的新列表 但我不明白如何将垂直指针(链接)链接到下一个列表 有人能解释一下如何链接底部列表的垂直指针吗?使用递归: 要将行添加到C-矩阵作为链表的表示,c,matrix,linked-list,C,Matrix,Linked List,我有以下数据结构: 将矩阵表示为链表的 我需要在底部添加一个新的矩阵行,并用零初始化该列表的值 问题:是否可以为每个节点使用带有两个链接的单独列表?这样,我们可以在底部添加一个带有水平指针(链接)的新列表 但我不明白如何将垂直指针(链接)链接到下一个列表 有人能解释一下如何链接底部列表的垂直指针吗?使用递归: 要将行添加到NULL(表示空表),请返回NULL(空表) 要将行添加到非空元素左下角: 创建新元素newNode 将newNode的向上指针链接到bottomLeft 将行追加到bott
NULL
(表示空表),请返回NULL
(空表)
要将行添加到非空
元素左下角
:
newNode
newNode的向上指针链接到bottomLeft
bottomLeft->right
将该行另存为newNode
的右指针
0
newNode
struct Node;
struct Node {
struct Node *up;
struct Node *right;
int value;
};
struct Node *addRow(struct Node *bottomLeft) {
if(bottomLeft == NULL) {
return NULL;
} else {
struct Node* newNode = malloc(sizeof(struct Node));
newNode->value = 0;
newNode->up = bottomLeft;
newNode->right = addRow(bottomLeft->right);
return newNode;
}
}
如果我理解了这个问题,那么是的,这是可能的,您可以使用指针到指针和前向链接迭代地这样做,这是一种按照输入遍历顺序构建链表的常用技术 给定如下节点结构:
struct Node
{
struct Node *up;
struct Node *right;
int value;
};
通过执行以下操作,您可以在“矩阵”的底部挂起一个一对一的匹配节点(也就是说,您当前的底部行有N个节点,添加的行也将有N个节点):
struct Node *addRow(struct Node *mat)
{
struct Node *res = NULL, **pp = &res;
for (; mat; mat = mat->right)
{
*pp = malloc(sizeof **pp);
(*pp)->value = 0;
(*pp)->up = mat;
pp = &(*pp)->right;
}
*pp = NULL;
return res;
}
这是通过在创建的列表中遍历指向指针的指针来实现的,始终让它在下一个新节点中寻址将被设置为指向的指针。列表完成后,最后一个右
指针必须设置为NULL以终止右链列表(*pp=NULL;
完成此操作)
执行变得简单
mat = addRow(mat);
就这样 这个图表绝对不是一个数组。我想你可以把它描述为2D链表。为什么2D链表是矩阵的好数据结构呢?@Oliver Charlesworth你说这种数据结构可以描述为2D链表,但这不意味着它可以展平吗?这似乎不能被展平。这对于sparese矩阵可能是有意义的,也就是说,只有很少的非零项。不过,这需要更多的信息。如图所示,这似乎没有什么意义。但由于你没有告诉我们你想要什么,我们无法进一步帮助你,你的问题也不清楚。