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を返します。
}