リニアフォーム定義の関連操作(単一リンクリスト、シーケンステーブル)の二つの形式

する#include <stdio.hに> 
する#include < 文字列・H> 
の#include <malloc.hを>
 の#pragma警告(無効:4996)
 の#define ERROR 0
 の#define OK 1
 の#define MAXSIZE 100 

のtypedef int型ElemType。
typedef int型のステータス。
typedefは構造体のlノード。


typedefは構造体{ 
    ElemType *のELEM。
    int型の長さ。
    int型LISTSIZE; 
} SqList。

typedef 構造体lノード{ 
    ElemTypeデータ。
    構造体lノード* 次の; 
} lノード、 * LINKLIST。

ステータスInitSqlist(SqList&L){ // 初始化顺序表 
    L.elem = 新しいElemType [MAXSIZE]。
    もし(!L.elem)リターンERROR; 
    L.length = 0 ; 
    L.listsize = MAXSIZE。
    返却OK。
} 
ステータスInitLinkList(LINKLIST&L){ // 初始化单链表 
    L =(lノード*)はmalloc(はsizeof (lノード))。
    もし(!L)
         の戻りERROR; 
    L - >次=NULL;
     戻りOKを; 
} 

ステータスaddLinkList(LINKLIST&L、lノード* P){ // 単一のリンク・リストにデータを追加 
    lノード* E; 
    E = L;
     一方(E-> 次に){ 
        E = E-> 次に、
    } 
    E - >次に= P; 
    P - >次に= NULL;
     戻りOKを; 
} 

ステータスshowLinkList(LINKLIST&L){ // 表示データを単一のリスト 
    のprintf(" リストデータ配列である:\ N- " ); 
    lノード * E = L ;
     しばらく(E-> 次に)
    { 
        のprintf(" %のD "、E->ネクスト> データ); 
        E = E-> 次に、
    } 
    のprintf(" \ N- " );
     戻りOKを; 
} 
ステータスshowSqlist(SqList&L){ // の表示データシーケンステーブル 
    のprintf(" 注文テーブルデータである:\ N- " のためにint型 I = 0 ; IはL.lengthを<; Iは++ 
    { 
        のprintf(" %のD " 、L.elem [I]) ;
    } 
    のprintf(" \ nを" );
    返却OK。
} 
ステータスtranLinkList(LINKLIST&L){ // 就地逆置单链表 
    lノード* P、Q *、* E。
    もし(L->次の!)戻りERROR; 
    P = L。
    Q = P->ネクスト> 次。
    P - >ネクスト>次= NULL;
    一方、(Q){ 
        E = Q-> 次。
        Q - >次= P-> 次。
        P - >次= Q。
        Q = E; 
    }     
    リターン OK。
}

ステータスunitSqList(SqList&、SqList&B、SqList&C){ // データ増分順序テーブル(C)、表AおよびBに昇順に配列表の同一の数、bは好きではない
    int型I、Jを、K; 
    I = 0 
    J = 0 
    K = 0 ;
     一方は、真の){
         IF(I> J a.length ||> てb.lengthする){
             戻りOKを; 
        } 
        IF(a.elem [I]> B .ELEM [J]){ 
            J ++ ;
             続行; 
        } 
        IF(a.elem [I] <b.elem [J]){ 
            I ++ 続け; 
        } 
        もし(a.elem [I] == b.elem [J]){ 
            J ++ 
            c.elem [K] = a.elem [I]。
            c.length ++ ; 
            K ++ ;
            続け; 
        } 
        
        
    } 
    

} 
ステータスunitLinkList(LINKLIST&A、LINKLIST&B、LINKLIST&C){ 
    lノード * P、Q *、* R。
    P = A-> 次。
    Q = B-> 次。
    しばらく
    { 
        もし!(P || Q){
             リターンOK。
        } 
        であれば(P->データ> Q-> データ){ 
            Q = Q-> 次。
            続け; 
        } 
        であれば(P->データ<Q-> データ){ 
            P = P-> 次。
            続け; 
        } 
        であれば(P->データ== Q-> データ){ 
            R =(lノード*)はmalloc(はsizeof (lノード))。
            R - >データ= P-> データ。 
            addLinkList(C、R)。
            Q= Q-> 次。
            続け; 
        } 
    } 
} 

ボイドメイン(){ 
    LINKLIST L、M、N。
    InitLinkList(L)。
    InitLinkList(M)。
    InitLinkList(N)。
    int型 NUM1 [ 10 ] = { 12345678910 }。
    INTの NUM2 [ 10 ] = { 3456 7910111213 }。
    以下のためにint型 i = 0 ; iは< 10 I ++; ){ 
        lノード * P =(lノード*)はmalloc(はsizeof (lノードを)); 
        lノード * Q =(lノード*)はmalloc(はsizeof (lノード))。
        P - >データ= NUM1 [I]。
        Q - >データ= NUM2 [I]。
        addLinkList(L、P)。
        addLinkList(M、Q)。
    } 
    unitLinkList(L、M、N)。 
    showLinkList(L)。
    showLinkList(M)。
    showLinkList(N)。


    
    SqList A、B、C。
    InitSqlist(A)。
    InitSqlist(B)。
    InitSqlist(C)。
    INT J = 0 ; J < 10 ; J ++ ){ 
        A.elem [J] = NUM1 [J]。
        A.length ++ ; 
        B.elem [J] = NUM2 [J]。
        b.length ++ ; 
    } 
    unitSqList(A、B、C)。
    showSqlist(A)。
    showSqlist(B)。
    showSqlist(C)。
    


}

 

おすすめ

転載: www.cnblogs.com/chenglin520/p/jayCling.html