/ *
時間:2019年10月13日午前11時16分02秒
注:いくつかの一般的な操作のリンクリスト
* /
書式#include <stdio.hに>
する#include <malloc.hを>
する#include <stdlib.h>に含ま
時間:2019年10月13日午前11時16分02秒
注:いくつかの一般的な操作のリンクリスト
* /
書式#include <stdio.hに>
する#include <malloc.hを>
する#include <stdlib.h>に含ま
ノード構造体のtypedef
{
データINT; //データフィールド
構造体ノード* pNext; //ポインタフィールド
} NODE、* PNODE、ノードの構造体へのノード、PNODE同等の構造体への// NODE相当*
{
データINT; //データフィールド
構造体ノード* pNext; //ポインタフィールド
} NODE、* PNODE、ノードの構造体へのノード、PNODE同等の構造体への// NODE相当*
//函数声明
PNODEのcreate_list(無効)。
空traverse_list(PNODE PHEAD)。
ブールis_empty(PNODE PHEAD)。
int型length_list(PNODE)。
ブールinsert_list(PNODE、int型、int型);
ブールdelete_list(PNODE、int型、int型*);
空sort_list(PNODE)。
PNODEのcreate_list(無効)。
空traverse_list(PNODE PHEAD)。
ブールis_empty(PNODE PHEAD)。
int型length_list(PNODE)。
ブールinsert_list(PNODE、int型、int型);
ブールdelete_list(PNODE、int型、int型*);
空sort_list(PNODE)。
メインINT(ボイド)
{
PNODE PHEAD = NULL;ノードPHEAD = NULL構造体に// *等価;
PHEAD create_listは=(); // create_list()関数:単鎖非環式を作成するために、リスト接合ヘッドPHEADするために支払わアドレスポイント
traverse_list(PHEADを);
IF(is_empty(PHEAD))
{
のprintf( "リストは、N- \空である!");
}
他
{
のprintf( "リストは、N- \空ではありません!");
}
length_list長= INT(PHEAD);
のprintf( "リストの長さ:%Dを\ n"、長さ )。
のprintf( "リストの長さ:%Dを\ n"、長さ )。
( "ソート")のprintf;
sort_list(PHEAD);
traverse_list(PHEAD);
IF(insert_list(PHEAD、4,26))
{
のprintf( "挿入ノード");
traverse_list(PHEAD);
}
他
{
printf関数( "挿入ノードは、\ N-失敗しました!");
}
sort_list(PHEAD);
traverse_list(PHEAD);
IF(insert_list(PHEAD、4,26))
{
のprintf( "挿入ノード");
traverse_list(PHEAD);
}
他
{
printf関数( "挿入ノードは、\ N-失敗しました!");
}
INTヴァル;
IF(delete_list(PHEAD ,. 4、およびヴァル))
{
のprintf( "要素を削除:%dを、ノードを削除し、"ヴァル);
traverse_list(PHEAD);
}
他
{
printf関数は、(「ノードに障害が発生した削除! \ N- ");
}
リターン0;
IF(delete_list(PHEAD ,. 4、およびヴァル))
{
のprintf( "要素を削除:%dを、ノードを削除し、"ヴァル);
traverse_list(PHEAD);
}
他
{
printf関数は、(「ノードに障害が発生した削除! \ N- ");
}
リターン0;
}
Create_list PNODE(ボイド)
{
int型のlen、アクティブノードの数を格納するために使用//
のprintf( "生成するリストのノード番号を入力してください:= LEN");
scanfの( "%のD"、およびLEN)を、
{
int型のlen、アクティブノードの数を格納するために使用//
のprintf( "生成するリストのノード番号を入力してください:= LEN");
scanfの( "%のD"、およびLEN)を、
ヴァルint型; //一時的にユーザノードによって値の入力を格納します
//割り当てられた有効なデータが最初のノードが割り当てられていない、ヘッドポインタ、最初のノードへPHEAD点PHEAD
PNODE PHEAD =(PNODE)はmalloc(はsizeof(ノード));
IF(PHEAD == NULL)
{
のprintf ( "割り当てが失敗し、プログラムが\ N-終了!");
出口(-1);
}
PNODE PHEAD =(PNODE)はmalloc(はsizeof(ノード));
IF(PHEAD == NULL)
{
のprintf ( "割り当てが失敗し、プログラムが\ N-終了!");
出口(-1);
}
PNODE pTail = PHEAD; // pTailは常にエンドノードにポイントが表す
pTail-> pNext = NULL;
pTail-> pNext = NULL;
(; IはLEN <I ++はI 0 = INT)のために
{
;:のprintfは(。、I + 1を"%d個のノードの値を入力してください")
scanfの( "%のD"、およびヴァル);
//すべてのサイクル、 PNEWは、新しいノードを作成します
PNODE PNEW =(PNODE)はmalloc(はsizeof(ノード));
IF(PNEW == NULL)
{
のprintf( "割り当てが失敗し、プログラムが\ N-終了!");
出口(-1);
}
{
;:のprintfは(。、I + 1を"%d個のノードの値を入力してください")
scanfの( "%のD"、およびヴァル);
//すべてのサイクル、 PNEWは、新しいノードを作成します
PNODE PNEW =(PNODE)はmalloc(はsizeof(ノード));
IF(PNEW == NULL)
{
のprintf( "割り当てが失敗し、プログラムが\ N-終了!");
出口(-1);
}
pNew->データ=ヴァル;
pTail-> pNext = PNEW; // PNEW PHEADの後部に連結
pNew-> pNext = NULL;
PTAIL PNEW =;
}
pTail-> pNext = PNEW; // PNEW PHEADの後部に連結
pNew-> pNext = NULL;
PTAIL PNEW =;
}
ペット復帰。
}
traverse_listボイド(PNODE PHEAD)
{
PNODE P = PHEAD;
のprintf( "リンクされたリストである:");
ながら(!P-> pNext = NULL)
{
のprintf( "%のD"、P-> pNext->データ) ;
P = P-> pNext;
}
のprintf( "\ N-")。
{
PNODE P = PHEAD;
のprintf( "リンクされたリストである:");
ながら(!P-> pNext = NULL)
{
のprintf( "%のD"、P-> pNext->データ) ;
P = P-> pNext;
}
のprintf( "\ N-")。
}
ブールis_empty(PNODE PHEAD)
{
IF(NULL == pHead-> pNext)
{
trueを返します。
}
他
{
falseを返します。
}
}
{
IF(NULL == pHead-> pNext)
{
trueを返します。
}
他
{
falseを返します。
}
}
INT length_list(PNODE PHEAD)
{
int型LEN = 0。
PNODE P = pHead-> pNext。
一方、(!p = NULL)
{
P = P-> pNext。
LEN ++;
}
LENを返します。
}
{
int型LEN = 0。
PNODE P = pHead-> pNext。
一方、(!p = NULL)
{
P = P-> pNext。
LEN ++;
}
LENを返します。
}
ボイドsort_list(PNODE PHEAD)
{
{
PNODEのP、Q;
int型のトン。
用(P = pHead-> pNext; P = NULL P = P-> pNext!)
{
(; Q = NULL; Q = P-> pNext!Q = Q-> pNext)用
{
IF(P - >データ> Q - >データ)
{
T = P->データ。
p型>データ= Q->データ;
Q->データ= tの、
}
}
}
を返します。
int型のトン。
用(P = pHead-> pNext; P = NULL P = P-> pNext!)
{
(; Q = NULL; Q = P-> pNext!Q = Q-> pNext)用
{
IF(P - >データ> Q - >データ)
{
T = P->データ。
p型>データ= Q->データ;
Q->データ= tの、
}
}
}
を返します。
}
//リストの先頭に挿入がposが新しいノード、ノード値がValで、その値は、POS 1開始からあるノードPHEAD指さ
BOOLのinsert_list(PNODE PHEADは、POSをINTは、INTヴァル)
{
int型I 0 =;
PNODE P = PHEAD;
ながら(= NULL && P-POS 1> I。!)
{
P = P-> pNext;
Iは++;
}
BOOLのinsert_list(PNODE PHEADは、POSをINTは、INTヴァル)
{
int型I 0 =;
PNODE P = PHEAD;
ながら(= NULL && P-POS 1> I。!)
{
P = P-> pNext;
Iは++;
}
IF(I> POS-1 || P == NULL)
{
falseを返します。
}
PNODE PNEW =(PNODE)はmalloc(はsizeof(NODE))。
もし(NULL == PNEW)
{
のprintf( "动态分配内存失败\ N!");
出口(-1)。
}
pNew->データ=ヴァル。
PNODE Q = P-> pNext。
P-> pNext = PNEW。
pNew-> pNext = Q。
trueを返します。
}
{
falseを返します。
}
PNODE PNEW =(PNODE)はmalloc(はsizeof(NODE))。
もし(NULL == PNEW)
{
のprintf( "动态分配内存失败\ N!");
出口(-1)。
}
pNew->データ=ヴァル。
PNODE Q = P-> pNext。
P-> pNext = PNEW。
pNew-> pNext = Q。
trueを返します。
}
ノードが除去される前に、//ノードを見つける
BOOLのdelete_list(PNODE PHEAD、POS INTを、INT *をpVal)
{
int型I = 0;
PNODE P = PHEAD;
(!P-> pNext = NULL && I <-pos 1)一方
{
P = P-> pNext;
Iは++;
}
IF(I> POS 1-P - == NULL ||> pNext。)
{
falseに戻り;
}
PNODE Q = P-> pNext;
*をpVal Q- =>データ;
/ /ノードPの後ろのノードを削除
P-> = P-pNext> pNext-> pNext;
フリー(Q);
Q = NULL;
trueに戻します;
}