|
/************************************************************************************
用結(jié)構(gòu)體和指針構(gòu)造鏈表:
HEAD = p = (struct student *) malloc(LEN);的語(yǔ)句是用LEN讀出將要開(kāi)辟的新
單元所需的空間,然后由malloc();開(kāi)辟一個(gè)新的空間并將新的空間的首地址返回。
注意:malloc函數(shù)返回的地址(指針)是(void)類型的,即不指向一個(gè)特定的類
型的對(duì)象,因此,對(duì)其返回值進(jìn)行強(qiáng)制類型轉(zhuǎn)換,即(struct student *)malloc(LEN),
使它能指向struct student 類型的數(shù)據(jù)。
**************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h> //用malloc函數(shù)開(kāi)辟新單元時(shí)需用此頭文件
#define LEN sizeof(struct student) //LEN代表struct student類型數(shù)據(jù)的長(zhǎng)度
struct student //聲明struct student類型
{
int num;
float score;
struct student *NEXT; //指針變量HEAD和p
};
int main()
{
int i,n;
struct student *HEAD,*p,*q; //定義struct student類型的指針變量
printf("Please Input:\t");
scanf("%d",&n); //輸入鏈表的長(zhǎng)度
HEAD = p = (struct student *) malloc(LEN); //開(kāi)辟一個(gè)新單元并讓p和HEAD指向它
scanf("%d%f",&p->num,&p->score); //輸入第一個(gè)結(jié)點(diǎn)的數(shù)據(jù)
for(i=1;i<n;i++) //當(dāng)鏈表的長(zhǎng)度達(dá)到指定的長(zhǎng)度時(shí)結(jié)束
{
q = (struct student *) malloc(LEN); //開(kāi)辟第i個(gè)新單元,并讓q指向它
scanf("%d%f",&q->num,&q->score); //輸入第i個(gè)結(jié)點(diǎn)的數(shù)據(jù)
p->NEXT = q; //使第i-1個(gè)結(jié)點(diǎn)的成員NEXT指向第i個(gè)結(jié)點(diǎn)
p = q; //使p指向第i個(gè)結(jié)點(diǎn)
}
p->NEXT = NULL; //使最后個(gè)結(jié)點(diǎn)的NEXT成員不指向任何結(jié)點(diǎn)
printf("The information:\n");
for(p=HEAD;p!=NULL;) //當(dāng)p不指向任何一個(gè)結(jié)點(diǎn)時(shí)結(jié)束循環(huán)
{
printf("%d\t%.2f\n",p->num,p->score); //輸出當(dāng)前結(jié)點(diǎn)的數(shù)據(jù)
p = p->NEXT; //使p指向下一個(gè)結(jié)點(diǎn)
}
return 0;
}

|
|