stud *Creat( int n ) //創(chuàng)建一個(gè)返回是結(jié)構(gòu)體類型的指針,這里的n是創(chuàng)建的節(jié)點(diǎn)個(gè)數(shù),由用戶決定
{
int i;
stud *h, *p, *t; //三個(gè)指針是此方法創(chuàng)建鏈表的必要條件,一個(gè)頭指針,另外兩個(gè)輪流交換地址(指針指向)
h = ( stud * )malloc( sizeof( stu ) );
h -> next = NULL; //初始化
h -> name[0] = '\0'; //把數(shù)組的第一個(gè)空間取'\0'時(shí),后面的空間都是'\0'
t = h; //交換地址開始
for( i = 0;i < n;i++ )
{
p = ( stud * )malloc( sizeof( stu ) );
t -> next = p;
p -> next = NULL; //中間就是一個(gè)輪流交換的過(guò)程,把各種指針指向正確的位置就行了
//技巧就是就是只寫每產(chǎn)生一個(gè)新結(jié)點(diǎn)時(shí)候的操作
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",p -> name );
t = p; //讓t指向新結(jié)點(diǎn),可以理解成“又一波循環(huán)的開始”,每次把其他指針搞定之后一定要這步操作
}
p -> next = NULL; //如果是循環(huán)單鏈表的話這里改成 p ->next = h;
return h; //返回頭指針
}
stud *Creat( int n )
{
int i;
stud *h, *p, *t; //三個(gè)指針是此方法創(chuàng)建鏈表的必要條件,一個(gè)頭指針,另外兩個(gè)輪流交換地址
h = ( stud * )malloc( sizeof( stu ) );
h -> next = NULL; //初始化
h -> prior = NULL;
h -> name[0] = '\0';
t = h;
for( i = 0;i < n;i++ )
{
p = ( stud * )malloc( sizeof( stu ) );
p -> next = NULL;
p -> prior = t; //這里面的操作其實(shí)很簡(jiǎn)單,就是只寫每產(chǎn)生一個(gè)新結(jié)點(diǎn)時(shí)候的操作,主要就是指針操作嘛
t -> next = p;
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",p -> name );
t = p; //最后別忘了把 t指向新結(jié)點(diǎn)
}
t -> next = NULL; //有些書上加了這步,但我覺(jué)得沒(méi)有必要,得好好思考一下