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