チェーン作成の3つの方法


最も一般的なデータ構造の一つとして、チェーンテーブルは様々な面に広く応用されており、オペレーティングシステムの下のドライバから様々なアプリケーションまで、
どこでもチェーンの姿が見られます.操作の簡便さと応用の効率性のためです.個人の現在学んだことを総括して、チェーンの創建方式は主にあります.
以下のいくつかの方法:
方法1:
struct link_node {
   struct link_node *next;
   int value;
};


  struct link_node *list = NULL;
  struct link_node *tail = NULL;
  struct link_node *node;
  
  for ( i = 0; i < n; i++ ) {
      node = (struct link_node *)malloc(sizeof(struct link_node));
      node->next = NULL;
      node->value = ??;
      if ( tail != NULL ) {
         tail->next = node;
         tail = node;
      }
      else {
          list = tail = node;
      }
  }
この方法は最も一般的な方法であり、簡単明瞭であるべきですが、残念なことに、挿入するたびに比較し、毎回tailの値を変更します.
方法二:
struct link_node *list = NULL;
struct link_node **tail = &list;
struct link_node *node;

for ( i = 1; i <= 5; i++ ) {
     node = (struct node *)malloc(sizeof(struct node));
     node->next = NULL;
     node->value = ??;

     *tail = node;
     tail = &(node->next);
}
この方法は少し推敲する必要があります.tailはここで乗り換えの役割を果たし、効率的なデータ挿入を実現しました.
方法三:
struct link_node *list = (struct node *)malloc(sizeof(struct node));
list->next = NULL;
list->value = (int)list;

struct link_node *node;

for ( i = 1; i <= n; i++ ) {
    node = (struct node *)malloc(sizeof(struct node));
    node->next = NULL;
    node->value = ??;

    (struct link_node *)(list->value)->next = node;
    list->value = (int)node;
}
この方法は少し巧妙ですが、学習性を失わず、最後のリストのvalueは最後の結点の住所です.nextは最初の意味を持つアドレスを指します.
valueの結点.