STEP3。テーブルの1日目の線形リンクリストデータ構造

今日は注文からテーブルベースのリストに、テーブルのデータ構造の線形部分を学び続け、アナロジーは、検索、ソートやその他の問題を変更するには、いくつかの呼び出し機能、追加および削除の完全なテーブルを書きました。

具体的には、リストがソートされ、テストに思考の多くは、最終的には成功のささやかを感じ、ストロークに沿って書かれており、コードの合格率が増加し、ほとんど変更することなく過ごし渡し、しばらくふざけて作ります。

書式#include <stdio.hに>
する#include <stdlib.h>に含ま

//再定義のデータ型名
のtypedef int型DATETYPE。

//リスト構造
の構造体のtypedef {LINKLIST
; DATETYPE日付
構造体*次LINKLIST;
} LINKLIST、* linklist_p。

//リストの先頭の作成
linklist_pのlinklist_creat(){

; linklist_pヘッド= NULL
ヘッド=(linklist_p)はmalloc(はsizeof(LINKLISTを)); //スペースを割り当てる
のIF {(ヘッド!)
のprintf( "malloc関数は\ N-失敗");
NULLを返します;
}

//のmemset(&(頭部>日付 )、0、はsizeof(DATETYPE)); // データを初期化
頭部>次= NULL;

頭を返します。
}

//头部插入
空隙linklist_head_insert(linklist_pヘッド、DATETYPE値){
linklist_pのTEMP = NULL;
TEMP = linklist_creat()。
temp->日付=値;

temp->次=頭部>次。
頭部>次=温度;
}


//遍历链表
空隙linklist_show(linklist_pヘッド){

ながら(!頭部>次= NULL){
のprintf( "%d個"、頭部>ネクスト>日付)。
ヘッド=頭部>次。
}
プット( "")。
}

//尾部插入
空隙linklist_tail_insert(linklist_pヘッド、DATETYPE値){
linklist_pのTEMP = NULL;
TEMP = linklist_creat()。
temp->日付=値;

temp->次= NULL;
一方、(!頭部>次= NULL){
ヘッド=頭部>次。
}
頭部>次= TEMP。
}


//按照位置插入
空隙linklist_pos_insert(linklist_pヘッド、int型のPOS、DATETYPE値){
linklist_pのTEMP = NULL;
TEMP = linklist_creat()。
temp->日付=値;

int型I = 1;
一方、(!頭部>次= NULL && iはPOSを<){
ヘッド=頭部>次。
I ++;
}
IF(I == POS){
temp->次=頭部>次。
頭部>次=温度;
}

のprintf( "位置不正の\ n");
}

//查找
INT linklist_search(linklist_pヘッド、DATETYPE値){
int型のPOS = 1。
(!頭部>次= NULL){一方
(頭部>ネクスト>日付==値)であれば{
戻りPOS。
}
POS ++。
ヘッド=頭部>次。
}
-1を返します。
}
//按值修改
無効linklist_value_update(linklist_pヘッド、DATETYPE古い、DATETYPE新){

しばらく(!頭部>次= NULL){
場合(頭部>ネクスト>日付==旧){
頭部>ネクスト>日付=新しいです。
}
ヘッド=頭部>次。
}
}

//位置によって修飾
空隙linklist_pos_update(linklist_pヘッド、int型のPOS 、DATETYPE値){

int型I = 1;
一方、(!頭部>次= NULL && iはPOSを<){
ヘッド=頭部>次。
I ++;
}
IF(!私== POS &&頭部>次= NULL){
頭部>ネクスト>日付=値。
}
他{
のprintf( "\ nを見つけることができません")。
}
}

//空のリストは、か否かを判断する
のint linklist_is_empty(linklist_pヘッド){

頭部>次に== NULLを返す1:?0;
}


//头部删除
DATETYPE linklist_head_del(linklist_pヘッド){
IF(linklist_is_empty(ヘッド)){
のprintf( "LINKLISTが空の\ nです")。
-1を返します。
}
int値=頭部>ネクスト>日付。
linklist_p TEMP =頭部>次。
頭部>次=頭部>ネクスト>次;
無料(TEMP)。
温度= NULL;
値を返します。

}

//テール削除
DATETYPEのlinklist_tail_del(linklist_pヘッド){

一方、(!頭部>ネクスト>次= NULL){
ヘッド=頭部>次。
}
int値=頭部>ネクスト>日付。
linklist_p TEMP =頭部>次。
頭部>次= NULL;
無料(TEMP)。
温度= NULL;
値を返します。
}

//翻转输出
空隙linklist_reversal(linklist_pヘッド){
linklist_pのP、Q。
P =頭部>次。
頭部>次= NULL;
(!p = NULL){ながら
Q = P。
P = P - >次。
Q->次=頭部>次。
頭部>次= Q。
}
}

//链表清空
空隙linklist_clear(linklist_pヘッド){
linklist_pのP、Q。
P =頭部>次。
頭部>次= NULL;
(!p = NULL){ながら
Q = P。
P = P - >次。
無料(Q);
Q = NULL;
}
}

//ソート
無効linklist_sortを(linklist_pヘッド){
linklist_pのP、Q、一時;
// Pは、リストの先頭ポインタをソートした後に分割する
// Qは、完全な発注データ要素がリリース滞在で
比較値を完了するよう命じている//一時最小データ要素をポインタ

P =頭部>ネクスト>次に、
頭部>ネクスト>次に= NULL; //リストを分割
しながら(!P = NULL){
INT = POS 1; //最初の挿入点
linklist_pのTEMP =ヘッド; / / OK初期位置決めは、リストをソート
しながら(!temp->次= NULL ){// 挿入ポイントを見つける
IF(P-> DATE <temp->ネクスト> DATE){
linklist_pos_insert(ヘッド、POS、P-> DATE)。
P = Q;
P = P->次に、
フリー(Q);
Q = NULL;
BREAK;
}
他{//最初の挿入が検出されない、変速比の位置ずれ
POS ++;
TEMP = temp->次に;
}
}

(== NULL次temp->)であれば {// それがうまくリンクされたリストデータ要素のソートさより大きい
linklist_tail_insert(ヘッド、P->日付);
Q = P;
P = P->次に、
フリー(Q);
Q = NULL;
}

}

}

 

//删除重复数据
空隙linklist_repeat_del(linklist_pヘッド){
linklist_p ITEMP =頭部>次。
linklist_p jtemp = itemp->次。
linklist_pのp = NULL;

一方、(jtemp){
IF(jtemp->日付== itemp->日付){
itemp->次= jtemp->次。
P = jtemp。
無料(P);
P = NULL;
jtemp = jtemp->次。
持続する;
}
ITEMP = itemp->次。
jtemp = itemp->次。

}

}


//に順番に挿入
INTメイン(int型ARGC、チャーCONST * ARGV [])
{
linklist_p linklist_creat一覧=();

linklist_head_insert(リスト4)。
linklist_head_insert(リスト、100);
linklist_head_insert(リスト1)。
linklist_head_insert(リスト2)。
linklist_head_insert(リスト3)。
linklist_head_insert(リスト7)。
linklist_head_insert(リスト7)。
linklist_head_insert(リスト7)。
linklist_head_insert(リスト7)。
linklist_head_insert(リスト7)。
linklist_head_insert(リスト5)。
linklist_head_insert(リスト9)。
linklist_head_insert(リスト、100);
linklist_head_insert(リスト8)。
linklist_head_insert(リスト、100);
linklist_head_insert(リスト、6)。

// linklist_show(リスト);

// linklist_tail_insert(リスト、9);
// linklist_show(リスト);

// linklist_pos_insert(リスト、11100);
// linklist_show(リスト);


//のprintf( "POS =%d個の\ n"、linklist_search(リスト8))。

// linklist_value_update(リスト、7111);
// linklist_show(リスト);

// linklist_pos_update(リスト、13,11);
// linklist_show(リスト);

// printfの( "%d個の\ n"は、linklist_head_del(リスト));
// linklist_show(リスト);

// printfの( "%d個の\ n"は、linklist_tail_del(リスト));
// linklist_show(リスト);


linklist_reversal(リスト);
linklist_show(リスト);

// linklist_clear(リスト);
// linklist_show(リスト);
linklist_sort(リスト);
linklist_show(リスト);

linklist_repeat_del(リスト);
linklist_show(リスト);
0を返します。
}

おすすめ

転載: www.cnblogs.com/huiji12321/p/11228894.html