は、私が質問を理解していれば、[はいその可能性、そしてあなたは、ポインタ対を使用したので、反復的に行うことができますポインタとフォワードチェイン、入力トラバーサル順序でリンクリストを構築するための一般的なテクニックです。
は次のようにノード構造を考える:
struct Node
{
struct Node *up;
struct Node *right;
int value;
};
あなたは「マトリックス」の下部に1対1のマッチングノードがハングアップすることができます(意味、あなたの現在の一番下の行は、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);
になります。
その図は間違いなく何の配列でもありません。私はあなたが2Dのリンクされたリストとしてそれを記述できると思います。 –
なぜ2Dリンクリストは行列の良いデータ構造だと思いますか? –
@Oliver Charlesworthあなたは、このデータ構造は2Dリンクリストとして記述できると言っていますが、それを平らにすることはできないでしょうか?これを平らにすることはできないようです。 – ufo