データ構造のシングルチェーンテスター挿入法


データ構造のシングルチェーンテスター挿入法
シングルチェーン表はリニアテーブルの一種で、シングルチェーン表のヘッド挿入法はプリピン法とも言われています.
チェーンテーブルはリニアテーブルの一種であり、シーケンステーブルとは違って、メモリに連続的に保存されていません.C言語では、チェーンはポインタ関連で実現されます.一方、シングルチェーンテーブルはチェーンテーブルの中の一つで、シングルチェーンテーブルについてはそのノードにデータドメインがあり、次のノードを指す一つのポインタ領域しかない.シングルチェーン表を作成する方法は2つあります.それぞれヘッド挿入法と最後挿入法です.
ヘッド挿入法とは、ノードの逆順によって徐々にチェーンの頭に結点を挿入することです.逆の補間法は、ノードの順序によって徐々にリンクの末尾にノードを挿入することである.
対照的に、最初の入力のノードは、最後に生成されるチェーンテーブルが逆順序であり、実際にはチェーンテーブルの最後のノードである.
習慣のために、通常はテール・インサートでチェーンを作る.下のコードはヘッドセットと最後のプラグインを実現します.
ヘッドノードを作成
//     
Node* Create_List ()
{
    //     
    Node* list = (Node*) malloc(sizeof(Node) / sizeof(char));


    if (NULL == list)   //        
    {
        return FALSE;
    }

    list->next = NULL;  

    return list;
}
挿頭法
//    
int Insert_Last (Node* h, LinkData data)
{
    //           
    if (NULL == h)
    {
        return FALSE;
    }
     //               
    Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));
    if (NULL == node)
    {
        return FALSE;
    }

    //          
    node->data = data;
    node->next = h->next;   //        :node->next = *h;

    //               
    h->next = node;

    return TRUE;
}
尾行法
//  
int Insert_Last(Node* h, LinkData data)
{
    if (NULL == h)
    {
        return FALSE;
    }
     //               
    Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));
    if (NULL == node)
    {
        return FALSE;
    }

    //          
    node->data = data;
    node->next = NULL;

     //                
    Node* tmp = h;
    while(tmp->next)
    {
        tmp = tmp->next;
    }
    //               node
    tmp->next = node;

    return TRUE;
}
拡張
中間挿入
//     
int Insert_Pos(Node *h, int pos, LinkData data)
{
    //        
    if (NULL == h)
    {
        return FALSE;
    }

    Node* tmp = h;
    int i;
    for (i = 0; i < pos - 1; i++)
    {
        if (NULL == tmp)
        {
            break;
        }
        tmp = tmp->next;
    }
    //  tmp    
    if (NULL == tmp)
    {
        printf ("      ");
        return FALSE;
    }

    Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));
    if (NULL == node)
    {
        return FALSE;
    }

    node->data = data;
    node->next = tmp->next;
    tmp->next = node;

    return TRUE;    
}