2016-03-27 3 views
0

大学のクラスでは、連鎖リストを作成したい場合は、ストラクチャを作成し、リストのすべての部分をポインタとして扱うことを教えてくれました。このような 何か:なぜ、構造体へのポインタをチェーンリストの正規のstruct-type変数よりも使用するのですか?

typedef struct node_elem { 
    int key; 
    int value; 
    struct node_elem* next; 
} node; 
typedef node* node_ptr; 

int main() { 
    node_ptr b; 
    b = (node_ptr) malloc(sizeof(node)); 
    b->key = 2; b->value=20; 

は、私はそれが構造体にデータを書き込むための唯一の信頼できる方法だと思ったんだけど、次のことを試してみました、それは同様に働いた:

node a, c; // this instead of pointer, direct declaration 
node_ptr b; 
b = (node_ptr) malloc(sizeof(node)); 
a.key = 1; a.value = 10; 
a.next = b; 
b->key = 2; b->value = 20; 
b->next = &c; 
c.key = 3; c.value = 30; 

んが、私の質問はありません:なぜポインタバリアントを使用することもできますか?私は別にメモリを割り当てる必要がないので、他の方法は簡単だと思われる。いずれにせよ、私はリストを反復することができます。

+0

"ポインタバージョン"とは、ローカル変数(つまり 'a'または' c'変数)を作成するのではなく、 'malloc'(つまり' b'変数)でメモリを割り当てることですか? – Cornstalks

+2

1000個のノードを持つリストを作成してみてください。あなたは1000個の変数宣言を書き留めますか? –

+0

@Cornstalksはい – phip1611

答えて

0

リストノードを静的に動的に両方の方法で割り当てることができます。しかし、リンクされたリストを使用する感覚は、そのリストを任意のサイズで成長させ、任意の数のノードでリストを埋めることです。

なぜ静的ノードがある場合にリンクリストを作成しますか?

ノードの数がわからない場合:どのようにノードを静的に宣言しますか?

関連する問題