チェーンテーブルの実現原理

5279 ワード

まず、チェーンテーブルを格納するためのデータ構造のノードを構築し、構造体によって実現することができます.
typedef struct node
{
  unsigned long int data;
  struct node* next;
}node_t;

一、ノードの第一歩を作成し、一時変数を定義し、第二歩を初期化し、そのヘッダノードが空ノードであるかどうかを判断し、空ノードである場合、一時ヘッダポインタを一時変数の第三歩に向け、ヘッダノードが空ノードでない場合、ヘッダノードを一時変数の次のノードに向け、ヘッダノードをそのノードに向ける
node_t* link_create(node_t* head,unsigned long int data)
{
    node_t* temp = MALLOC;
    temp->data = data;
    if(head == NULL)
    {
        temp->next = NULL;
        head = temp;
    }
    else
    {
        temp->next = head;
        head = temp;
    }
    return head;
}

二、1つのノードの第1ステップを削除し、2つのポインタ変数をそれぞれtemp 1と定義し、temp 2はヘッダノードの第2ステップを指し、temp 1がユーザーが検索する価値のあるノードに等しくない場合、temp 2はtemp 1を指す.temp 1は次のノードを指し、ポインタがユーザが調べる場所を指すまで第3のステップを指す.このときtemp 1は現在削除する必要があるノードを指し、temp 2は前のノードを指すので、temp 2のポインタをtemp 1の次のノードを指し、temp 1のノードを解放する
node_t* link_create(node_t* head,unsigned long int data)
{
    node_t* temp = MALLOC;
    temp->data = data;
    if(head == NULL)
    {
        temp->next = NULL;
        head = temp;
    }
    else
    {
        temp->next = head;
        head = temp;
    }
    return head;
}

三、1つのノードを修正関数を検索することによって、現在修正する必要があるノードの位置を見つけ、現在のノードに対して値付け操作を行い、それによって修正操作を実現する
node_t* link_modify(node_t* head,unsigned long int data1,unsigned long int data2)
{
    node_t* temp;
    temp = link_query(head,data1);
    temp->data = data2;
    return head;
}

四、ノードを検索する第一歩、一時的なポインタがヘッドノードを指す第二歩を宣言し、ループで検索し、現在のノードがユーザーが検索する必要がある値に等しくない場合、ポインタは次のステップに進み、最後のノードが見つからない場合、印刷情報を出力し、現在のチェーンテーブル内にユーザーが検索したデータがないことを示す
node_t* link_query(node_t* head,unsigned long int data)
{
    node_t* temp = head;
    while(temp->data != data)
    {
        temp = temp->next;
        if(temp->next == NULL)
        {
            printf("not find your data!");
        }
    }
    return temp;
}

五、現在のチェーンテーブルの第一歩を表示し、一時ポインタを宣言し、一時変数の第二歩に頭結点を割り当て、一時ポインタの次のノードが空であるかどうかを判断し、空でない場合、各ノードの値の第三歩を循環印刷し、空である場合、直接現在ポインタの値を出力する
void link_display(node_t* head)
{
    node_t* temp = head;
    while (temp->next != NULL)
    {
        printf("%ld
"
,temp->data); temp = temp->next; } printf("%ld
"
,temp->data); }