リンクされたリストの操作の(先頭ポインタで)改善されたバージョン:のセットを計算します

<iostreamの>などが
使用して名前空間STDを、

構造体{lノード
    データのint; 
    lノード * 次; 
};

 //は、ヘッドノードのアドレス保存
のstruct {LINKLIST 
    lノード * 頭を; 
};

 //は、第1ノード初期化のリスト作成
、ボイドの作成を(LINKLISTL)
{ 
    L.head = 新しい新しいlノード; 
    L.head - >データ= 0; 
    L.head - >次に= NULL; 
} 


ボイド表示(LINKLISTL)
{ 
    lノード * P = L.head - > 次に;
     一方、(P)
    { 
        COUT << P - >データ<< "  " ; 
        P = P - > 次に; 
    } 
    COUT << ENDL;
     リターン; 
}
 // 添加元素X、およびので、昇順にリスト
ボイドInsertList(LINKLISTL、 Xはint)
{
     // P最初のデータノード、PRヘッドノード
    lノード * P = L.head - >次に、PR * = L.head;
     ながら(X && P> = P - > データ)
    { 
        IF( P == X - >データ)     のリターン ; // 繰り返し要素が挿入されていない
        PR = ; P 
        Pを = P - >次に; 
    } // ループの端テーブル又は第Xの終了位置(位置を挿入する)データよりも小さい見つかったことを示す
     // 両方のケースを挿入する必要があり、コードは同じであり、
    lノード * = S 新しい新しいlノード。
    S - >データ= X; 
    S - >次に= P; 
    PR - >次に= S;
     リターン; 
}
 // 削除する要素X 
空隙DeleteList(LINKLISTL、INT X)
{ 
    lノード * P = L.head - > 次に; 
    lノード * PR = L.head;
     一方(P)
    { 
        IF(P - >データ== X)
        {
            PR - >次= P - > 次。
            Pを削除します。
            返します
        } 
        PR = P。
        P = P - > 次。
    } 
    を返します
}
 // 两个有序集合的并集
空隙union_1(LINKLIST&HA、LINKLIST&HB)
{ 
    LINKLIST ha_temp = HA、hb_temp = HB。
    lノード * P1 = ha_temp.head、* P2 = hb_temp.head。
    一方(P2)
    { 
        InsertList(ha_temp、P2 - > データ)。
        P2 = P2 - > 次。 
    } 
    リターン; 
}
 // 两个有序集合的交集
空隙union_2(LINKLIST&HA、LINKLIST&HB)
{ 
    lノード * P1 = ha.head、* P2 = hb.head。
    一方(P1 && P2)
    { 
        場合( - >データ== P2 - > P1 データ)
        { 
            P 1 - = P1> 
            P2 = P2 - > 次。
        } 
        そう であれば(P1 - >データ<P2 - > データ)
        { 
            lノード *のTEMP = P1。
            P1 = P1 - > 次。
            DeleteList(ヘクタール、TEMP - >データ); 
        } 
        
        { 
            P2 = P2 - > 次に; 
        } 
    } 
    一方(P1)
    { 
        lノード * TEMP = P1、
        P1 = P1 - > 次に、
        DeleteList(HA、TEMP - > データ); 
    } 
} 

メインINT()
{
     // 要素の重複セットが存在しないことに注意
    LINKLIST HAは、
    (HA)を作成し、
    COUT << (-1000にエンド信号として)挿入する要素を入力し、収集HAを作成する: << ENDL。
    TEMP int型 =endl; 
    ショー(HB);同時に

    COUTの <<一時&&一時!= -1000 )ENDL; 

    union_1(HA、HB); 
    COUT << " HAとHBとの二組として設定され、" << ENDL; 
    表示(HA); 

    COUT << ENDL << ========== ================================================== ======  <<てendl << てendl;
     // ================================== ====================================== 

    LINKLISTのHC、
    作成します(HC); 
    coutの << " コレクションHCを作成し、(-1000としてエンド信号)に挿入する要素を入力してください:" << てendl; 
    TEMP = 0;
     しばらく(CIN >> TEMP && TEMP!= -1000
        InsertList(HC、TEMP); 
    coutの << " HC次のように順序集合" << てendl; 
    ショー(HC); 
    coutの << ENDL; 

    LINKLISTのHD; 
    (HD)を作成し; 
    coutの << コレクションHDを作成し、入力してください(-1000に終了信号のような)要素を挿入:" << てendl; 
    TEMP = 0;
     しばらく(&& CIN >> TEMPのTEMP = -1000! 
        InsertList(HD、TEMP); 
    COUT << " 順序集合以下のHD  << てendl; 
    ショー(HD); 
    coutの <<endl;

    union_2(HC、HD)、
    COUTは、 << " HCおよびHDを以下のように二組の交点である" << ENDL; 
    表示(HC); 

    戻り0; 
}

結果:

 

おすすめ

転載: www.cnblogs.com/Chaosliang/p/11600968.html