-1

次のコードは、Cで単一リンクリストを作成することになっています。insert_nodeがポインターヘッドで何をするかを理解したいと思います。insert_nodeが呼び出されるたびに「head」は何を指しますか?

struct node{
    int data;
    struct node* next; 
};
typedef struct node node;

    node* head = NULL; 

void insert_node(int data) {
    node *new_node = (node*) malloc(sizeof(node)); 
    new_node->data = data;
    new_node->next = head;
    head = new_node;
}
4

2 に答える 2

4

headリンクリストの先頭(リストの最初のエントリ)を指します。後続の要素を取得するには、next内のポインタをたどるだけnodeです。

新しいノードを追加するたびnextに、新しい要素のを現在の要素にhead設定headし、新しい要素に設定して、要素をチェーンします。

于 2013-02-01T22:35:33.940 に答える
2

Q:構造体内の構造体はCで何を意味しますか?

A:この場合、「struct node *」は、「structnode」タイプのリスト項目へのポインターとして使用されます。

これは型宣言です:

struct node{
    int data;
    struct node* next; 
};

これは変数の定義です:node* head = NULL; それは言うことと同等ですstruct node * head = NULL;

そして、これは変数の割り当てです。node *new_node = (node*) malloc(sizeof(node));

変数「head」は、リストの先頭への単なるポインターです。これは、リストを使用するときの「開始点」です。たとえば、リスト内のコンテンツの追加や検索などです。

「次へ」は常に「リスト内の次のアイテム」を指します。リストを初期化する前は、「Head」はnullです。リストの最後の項目である場合、各「次」は常にnullです。

「ヘッド」は一度だけ変更されます-リストを初期化するとき。「次へ」は2回変更されます。1)ノードが最初に追加されたときにnullに設定され、2)次のノードが追加されたときに次のノードを指すようにリセットされます。

'お役に立てば幸いです..

于 2013-02-01T22:37:56.320 に答える