データ構造 - 多項式合計リンクリストの実装

データ構造コース浙江大学の講義演習:ちょうど製品は書いていないこと、の和を書き、多項式の和​​と積を達成するためのリンクリストを使用しました。

#include <iostreamの> 
する#include <stdio.hの>
 使用して 名前空間STD; 

// 多項式にはtypedefの別名PolyNode *型の宣言である 
typedefの構造体 * PolyNode 多項式、
 構造体PolyNode 
{ 
    INT COEF;
     INT EXPON; 
    多項式リンクへ; 
}; 

無効に取り付け(INT C、int型の多項式* pRearへE)/ * * pRear値のリア変更する値で渡さへのポインタへのポインタである* / 
{を
    多項式Pを、

    P =(多項式)のmalloc(はsizeof構造体 PolyNode) );/ * 現在の多項式を記憶するために、新しいノードを作成する* / 
    P - >リンク= NULL; / * ノードがリストの各端部に挿入されるので、それはNULLを指すポインタよう* / 
    P - > C = COEFを; / * 新しいノード割り当てのため* / 
    P - > EXPON = E;  * pRear) - >リンク= P;
     * = P pRear; / * ----------------変化点リアリストの現在の終了----------------- * / 
} 

多項式ReadPolyに()
{ 
    多項式P、Tに、
    多項式後方に; / * 発現の最終結果の現在のエントリポインタ* / 
    int型C、 E、N; 

    scanfの(" %のD "、&​​N); / *読み取りいくつかの多項式がある* / 
    P = malloc関数((多項式)はsizeof構造体 P->リンク= NULL; PolyNode))/ * 空のノード・リスト・ヘッダとしての用途* / 
    リア = P; / * 現在のノードがリア付与ポインタ* / 
    がiFを(N < 1/ * 入力データが正しいかどうかをチェック* / 
        COUT << " が入力されるエラー" << ENDL;
     一方(N-- ){ 
        scanfの(" %Dの%のD "、&​​C 、&​​E); / * 多項式の係数インデックス読み取る* / 
        アタッチ(C、E、 リア)/ * 多項式に現在の項目* / 
    } 
    T = P; P-P =>リンク;フリー(T); / * 解放アプリケーションを開始する空のノード* / 
    / * ......... ...... * / 
    戻りPを; 
} 

多項式(多項式の多項式P1およびP2に)追加
{ 
    多項式T1、T2、Pに対して、
    多項式後方に、

    T1 = P1の; P2 = T2; / * P1およびP2点ヘッダに、できませんその値を変更し、またはリストを見つけることができない* / 
    P = malloc関数((多項式)はsizeof構造体 P->リンク= NULL; PolyNode))/ * 空のノード・リスト・ヘッダとしての用途* / 
    リア = P;
     一方( T1 &&T2){
         場合(T1-> EXPON == T2-> EXPON){
             もし、((T1-> COEF + T2-> COEF)!= 0 ){ 
                (T1添付 - > COEF + T2-> COEF、T1-> EXPON、&リア)。
                T1 = T1-> リンク; 
                T2 = T 2 - > リンク; 
            } 
            { 
                T1 = T1-> リンク。
                T2 = T 2 - > リンク; 
            } 
        } 
        そう であれば(T1-> EXPON> T2-> EXPON){ 
            取り付け(T1 - > COEF、T1-> EXPON、&
            T1 = T1-> リンク; 
        } 
        { 
            (T2添付 - > COEF、T2-> EXPON、および、リア)
            T2 = T 2 - > リンク; 
        } 
    } 
    一方(T1){ 
        取り付け(T1 - > COEF、T1-> EXPONを、&リア)。
        T1 = T1-> リンク; 
    } 
    ながら(t2)は{ 
        アタッチ(T2 - > COEF、T2-> EXPON、&リア)。
        T2 = T 2 - > リンク; 
    } 
    多項式T。
    T = P。P = P-> リンク; 無料(T);
    リターンP; 
} 

ボイドPrintPoly(多項式P)
{ 
    int型フラグ= 0 
    
    もし(!P){のprintf(" 0 0 \ N "); 返します} 

    一方、(P){
         場合(!フラグ)
            フラグ = 1 
            のprintf("  " ); 
        printf(" %D%D "、P-> COEF、P-> EXPON)。
        P = P-> リンク; 
    } 
    のprintf(" の\ n " ); 
}

INT メイン()
{ 
    P、多項式P1およびP2へ、
    P1の = ReadPoly(); 
    P2 = ReadPoly(); 
    P = 追加(PL、P2); 
    
    // 多項式Tであり; / *解放ヘッダー(ヘッダー空間なぜNO放出ノード)* /
     // T = P; P-P =>リンク;フリー(T); 

    PrintPoly(P); 
    のprintf(" %のDの%のD "、P-> COEF、P-> EXPON)。
     戻り 0 ; 
}

要約:

1.ヘッダポインタが移動できない、そうでない場合は、エントリーリストを見つけることができません

ヘッダとして2.アプリケーション空のノードは、データを挿入した後(無料)を記憶ノードを解放しなければなりません

3. malloc関数を使用してアプリケーションメモリ

  Baiduの百科事典:適用連続指定したサイズのあなたが本当のメモリ空間をバインドするときに、メモリの特定の場所を知っていないとき、あなたは動的なメモリ割り当てを使用する必要がある、*メモリ領域アドレスの戻り値の型をvoidに割り当てられたメモリブロック領域を

  使用例:P =(多項式)はmalloc(はsizeof(構造体PolyNode)); //多項式構造体PolyNodeの*は、typeofの別名は、Pは、メモリ内のこのノードの格納場所であります

リスト上の前記ポインタ・フィールド、ノードの一般的なリスト内の記憶位置へのポインタを、ポインタに格納されます。

  P1 =(多項式)はmalloc(はsizeof(構造体PolyNode))。

  新しいノードがリンクリストとして挿入されている達成するために、P->リンク= P1、すなわちように、例えばPは、現在のノード、塗布後のノードP1であります

おすすめ

転載: www.cnblogs.com/sunrise-to-set/p/10945115.html