STEP3。表リニア単一の双方向循環リストや循環リンクリストデータ構造3日目

1.単一の円形リストヨセフは、問題を解決します:

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


typedefは構造体のlooplist {
int型の日付。
次のstruct looplist *;
} looplist。

//円形リスト作成
looplistのlooplist_creat *(){
looplistヘッド* = NULLと、
ヘッド=(looplist *)はmalloc(はsizeof(looplist))。

頭部>日= 1;
頭部>次=ヘッド。
頭を返します。
}

//挿入ノード
ボイドlooplist_insert(looplist *ヘッド、int型の値){

looplist * TEMP = NULL;
TEMP =(looplist *)はmalloc(はsizeof(looplist))。
temp->日付=値;

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

//遍历1
空隙looplist_show(looplist *ヘッド){
looplistの*はP = NULL;
P =ヘッド。

{行う
のprintf( "%d個"、P->日付)。
P = P - >次。
}一方(P =ヘッド!)。
プット( "");
}

空looplist_del(looplist *ヘッド、looplist * headpre、looplist * headtemp){

printf( "%d個"、headtemp->日付)。

looplist * P = NULL;
P = headtemp。
headpre->次= headtemp->次。
printf( "\ n")を。
無料(P);
P = NULL;

}
looplist * joseph_creat(INT者){

私はint型。
looplist *ジョセフ= NULL;
ジョセフ= looplist_creat()。
(I =人; I> = 2; I - )のための{
looplist_insert(ジョセフ、I)。
}
ジョセフを返します。
}
ボイドジョセフ(INT者、int型開始、int型NUM){

looplist *ヘッド= NULL;
looplist * headpre = NULL;
ヘッド= joseph_creat(人)。
looplist_show(ヘッド)

looplist * headtemp =ヘッド。
一方、(headtemp->次=ヘッド!){
headtemp = headtemp->次。
}
headpre = headtemp。

headtemp =ヘッド。

一方、(headtemp-> DATE =開始!){
headpre = headtemp;
headtemp = headtemp->次に;
} //開始は、鎖中に死亡サイクルのリスクを判定されない
ながら(headtemp = headtemp->次! {)

int型counttemp = 1;
(!counttemp = NUM){一方
headpre = headtemp。
headtemp = headtemp->次。
counttemp ++;
}

looplist_del(ヘッド、headpre、headtemp)。
headtemp = headtemp->次。
}

printf( "%Dの\のN-"、headtemp-> DATE);
フリー(headtemp);
headtemp = NULL;
ヘッド= NULL;
}
int型のmain(int型ARGC、チャーCONST * ARGV [])
{
ジョセフ(8,3,4 ); // 8、個体の第3の数、列番号4の番号から始まる
戻り0;
}

2.双方向循環リスト

 

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

typedefは構造体ノード{
int型の日付。
構造体のノード*のPRIV。
次のstructノード*;
} doublelist。

doublelist * doublelist_creat(){
doublelist *ヘッド= NULL;
ヘッド=(doublelist *)はmalloc(はsizeof(doublelist))。

頭部> PRIV =ヘッド。
頭部>次=ヘッド。

頭を返します。
}

ボイドdoublelist_head_insert(doublelist *ヘッド、INT値){
doublelistの*のTEMP = doublelist_creat()。
temp->日付=値;

temp->次=頭部>次。
頭部>ネクスト> PRIV =温度;

temp-> PRIV =ヘッド。
頭部>次=温度;
}

空doublelist_show(doublelist *ヘッド){

doublelist * TEMP =頭部>次。
一方、(!TEMP =ヘッド){
のprintf( "%d個"、temp->日付)。
TEMP = temp->次。
}
のprintf( "の\ n");
}

int型doublelist_is_empty(doublelist *ヘッド){
頭部を返す>次==ヘッド?1:0。
}

int型doublelist_head_del(doublelist *ヘッド){
IF(doublelist_is_empty(ヘッド)){
のprintf( "doublelistが空の\ nです")。
-1を返します。
}
int値=頭部>ネクスト>日付。

doublelist * TEMP =頭部>次。
頭部>次= temp->次。
temp->ネクスト> PRIV =ヘッド。

無料(TEMP)。
温度= NULL;
値を返します。
}


INTメイン(int型ARGC、CONSTのchar *のARGV [])
{
doublelist *ヘッド= NULL;
ヘッド= doublelist_creat()。

doublelist_head_insert(ヘッド、1);
doublelist_head_insert(ヘッド、2);
doublelist_head_insert(ヘッド、3);
doublelist_head_insert(ヘッド、4)。
doublelist_head_insert(ヘッド、5)。

doublelist_show(ヘッド)

printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)

printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)

printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)

printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)

printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)
printf( "%d個の\ n"、doublelist_head_del(ヘッド))。
doublelist_show(ヘッド)
0を返します。
}

おすすめ

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