C言語 - リニアテーブル

する#include <stdio.hに>
する#include <STDLIB.H>
の#include <string.hの>
の#define LIST_SIZE 100
の#define LIST_INCREMENT 10
のtypedef int型データ型。
構造体のtypedef {
    データ型*データ。
    int型の長さ。
    int型LISTSIZE;
} seqlist。
/ * InitList(&L)
初期条件:なし
結果:空のテーブルの線形構成。エラー成功リターン0 * -1 /
INT InitList(seqlist * L)
{
    L->データ=(データ型*)はmalloc(はsizeof(データ型)* LIST_SIZE)。
    (L->データ== NULL)場合は
        リターン-1。
    L->長さ= 0。
    L-> LISTSIZE = LIST_SIZE。
    printf( "初期仕上げ\ N");
    0を返します。
}
/ * DestroyList(&L)
初期条件:線形形式のLがすでに存在している
検索結果を:フォームL.線形破壊 エラー成功リターン0 * -1 /
int型DestroyList(seqlist * L)
{
    しばらく(L->データ!)
    無料(L->データ);
    L->長さ= 0。
    printf( "仕上げを破壊する\ n個");
    0を返します。
}
/ * ListEmpty(L)
の初期条件:線形フォームLは、すでに存在している
検索結果を:リストLが空である場合、0を返し、そうでなければ-1 * /
ListEmpty(seqlistのL)INT
{
    (L.length == 0)であれば
    {
        ;のprintf( "リストが空である\ n")
        0を返します。
    }
    他の
        リターン-1。
}
/ * LISTLENGTH(L)
初期条件:線形形式のLが既に存在する
結果:テーブルの長さを返し、そうでない場合は-1を返します* /

INT LISTLENGTH(seqlistのL)
{
    L.lengthを返します。
}
/ * Getelem(L、I、 &E)
初期条件:リニアフォームL既に存在している1 = <I <= LIST_SIZEの
結果:戻り値L i番目のeだけの要素成功リターン0エラーリターン-1 * /
int型getElem (seqlistのL、I int型、データ型* E)
{
    IF(I <0 || I> LIST_SIZE)
    {
        のprintf( "位置誤差\ N-");
        戻り-1;
    }
    * E = L.data [I];
    リターン0;
}
/ * Locateelem(L、E)
初期条件:線形フォームLが既に存在する
結果:要素が存在しない場合、戻りL eは、その後、最初のシーケンス番号に等しく、-1 * /戻り
INT Locateelem(seqlist Lを、 Eデータ型)
{
    INT I; //トラバースリスト全体、リターン-1の最後まで見つからない場合
    (I = 0、I <L.length; I ++)用
    {
        IF(L.data [I] == E)
            。復帰I + 1;
    }
    -1リターン;
}
/ * Priorelem(L、cur_e、&pre_e)
初期条件:線形テーブルが既に存在する
結果:Lは最初の要素cur_eであり、そうでない場合には、pre_e要素とその前身に戻り、そうでなければエラー-1戻り成功* 0 /
INT Priorelem(seqlistのL、データ型cur_e、データ型pre_e *)
{
    int型I = 0;
    IF(cur_e == L.data [0])
        リターン-1;
    IはLocateelem(Lは、= cur_e);
    IF(I == -1)
        リターン-1;
    他
    {
        * pre_e L.data = [I - 2];
        戻り0;
    }
}
/ * Nextelem(L、cur_e、&next_e)
初期条件:線形テーブルが既に存在している
検索結果を:cur_eがLである場合の要素ではなく、最後の、next_e戻るとその後継の要素、それ以外の場合はエラー-1成功バック* 0 /
INT Nextelem(seqlistのL、データ型cur_e、データ型next_e *)
{
    int型I = 0;
    IF(cur_e == L.data [LISTLENGTH(L)-1])
        リターン-1;
    IはLocateelem(Lは、= cur_e);
    IF(I == -1)
        リターン-1;
    他
    {
        * next_e = L.data [I];
        戻り0;
    }
}
/ * ListInsert(&L、I、E)
初期条件:線形フォームLすでに存在する
結果:Lを挿入すると、I新しいデータテーブル長さプラス1前番目、成功時に0を返す、-1エラー* /
INT ListInsert(seqlistのL *、I int型、データ型E)
{
    IF(I <1 || I> L-> LISTSIZE)
    {
        のprintf( "位置誤差\ N-");
        戻り-1;
    }
    IF(L->長さ> L - => LISTSIZE)
        L->データ=(データ型*)reallocの(L->データ、(+ LIST_INCREMENT LIST_SIZE)*はsizeof(データ型));
    IF(L->データ)!
    {
        のprintf(「reallocのエラー\ N- 「);
        戻り-1;
    }
    データ型Q * = NULL;
    Q&L - =>データ[I - 1]; //挿入された位置
    データ型* P = NULL;
    用(p =&L->データ // - - P [1->長さ1]; P> = Q) 後方位置に割り当てられた値の前の最後の位置からこの順
    {
        *(P + 1)。 * P =;
    }
    * Q = E;
    L->長++;
    L-> LISTSIZE + = LIST_INCREMENT;
    戻り0;

}
/ * Listdelete(&L、I、&E)
初期条件:線形リストLの存在
結果:エラー要素Iのシリアル番号Lを削除し、バックによって値E、成功リターン0、-1 * /
int型Listdelete(seqlist * L、I int型、データ型* E)
{
    IF(I <1 || I> L-> LISTSIZE)
    {
        のprintf( "postionエラー:\ n");
        -1を返します。
    }
    データ型* Q = NULL;
    データ型* p = NULL;
    Q =&L->データ[I - 1]; //删除元素位置
    * E = Q *。
    P =&L->データ[1->長さ- 1]; //表尾位置
    ながら(Q <= P)
    {
        * Q = *(Q + 1)。
        Q ++;
    }
    L-> length--。
    0を返します。
}
メイン(ボイド)がINT
{
    seqlist Lと、
    InitList(&L)。
    INT I、K = 0。
    データ型E;
    データ型EE;
    データ型EEE;
    データ型EEEE。
    ための式(I = 1; iが<= LIST_SIZE + 1; I ++)
    {
        IF(ListInsert(&L、I、iはI)*!)
            のprintf( "第%D个数%D插入列表\ n"は、I、L.をデータ[I-1])。
    }
    のprintf( "リストの長さは%D \ nは"、LISTLENGTH(L))。

    K = 5;
    getElem(L、K-1、&E。);
    のprintf( "%dの数dは%D \ N-"、K、E);
    IF(ListEmpty(L))
        のprintf(「リストが空でない\ N- ");
    のprintf("数%Dは%D \ N- "25、Locateelem(L、25));
    Priorelem(L ,. 4、&EE);
    のprintf("はいはい%D Dの%前の要素\「,. 4、EE); N-
    Nextelem(L、256、&EEE);
    のprintf( "%Dの要素の後はいはい%D \ N-"、256、EEE);
    Listdelete(&L ,. 1、&EEEE);
    のprintf ( "削除要素であるD%\ N-」、EEEE);
    のprintf("リストDの長さは%\ N- '、LISTLENGTH(L));
    DestroyList(&L);
    GETCHAR();
    戻り0;
}

おすすめ

転載: www.cnblogs.com/wbwhy/p/11904201.html