我有以下的數據結構:Ç - 一個矩陣的表示作爲鏈接列表
表示一個矩陣作爲一個鏈表。
我需要在底部添加一個矩陣的新行並用零初始化該列表的值。
問題:是否有可能爲每個節點使用帶有兩個鏈接的單獨列表?這樣,我們可以在底部添加一個新的列表,並帶有水平指針(鏈接)。
但我不明白如何將垂直指針(鏈接)鏈接到下一個列表。
有人可以解釋如何鏈接底部列表的垂直指針?
我有以下的數據結構:Ç - 一個矩陣的表示作爲鏈接列表
表示一個矩陣作爲一個鏈表。
我需要在底部添加一個矩陣的新行並用零初始化該列表的值。
問題:是否有可能爲每個節點使用帶有兩個鏈接的單獨列表?這樣,我們可以在底部添加一個新的列表,並帶有水平指針(鏈接)。
但我不明白如何將垂直指針(鏈接)鏈接到下一個列表。
有人可以解釋如何鏈接底部列表的垂直指針?
如果我理解這個問題,然後是它的可能,你可以這樣做反覆使用指針TO-指針和正向鏈接,這是一種在輸入遍歷順序中構建鏈表的常用技巧。
給定的節點結構是這樣的:
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;
}
這是通過走指針到指針在列表中創建,總是有它解決將被設置爲指向下一個指針新節點。當列表完成時,最後的right
指針必須設置爲NULL來終止右鏈表(*pp = NULL;
完成此操作)。
執行簡直變成
mat = addRow(mat);
就是這樣。
使用遞歸:
要添加行NULL
(佔空表)返回NULL
(空表)。
要添加行non-NULL
元素bottomLeft
:
newNode
到bottomLeft
newNode
up pointer
到bottomLeft->right
保存該行作爲newNode
right pointer
。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;
}
}
該圖絕對不是任何數組。我想你可以把它描述成二維鏈表。 –
爲什麼認爲2D鏈表是一個矩陣的良好數據結構? –
@Oliver Charlesworth你說這個數據結構可以被描述爲二維鏈表,但是這不是說它可以被展平嗎?看起來這不能被平息。 – ufo