|
/************************************************************************************
用結構體和指針構造鏈表:
HEAD = p = (struct student *) malloc(LEN);的語句是用LEN讀出將要開辟的新
單元所需的空間,然后由malloc();開辟一個新的空間并將新的空間的首地址返回。
注意:malloc函數返回的地址(指針)是(void)類型的,即不指向一個特定的類
型的對象,因此,對其返回值進行強制類型轉換,即(struct student *)malloc(LEN),
使它能指向struct student 類型的數據。
**************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h> //用malloc函數開辟新單元時需用此頭文件
#define LEN sizeof(struct student) //LEN代表struct student類型數據的長度
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); //輸入鏈表的長度
HEAD = p = (struct student *) malloc(LEN); //開辟一個新單元并讓p和HEAD指向它
scanf("%d%f",&p->num,&p->score); //輸入第一個結點的數據
for(i=1;i<n;i++) //當鏈表的長度達到指定的長度時結束
{
q = (struct student *) malloc(LEN); //開辟第i個新單元,并讓q指向它
scanf("%d%f",&q->num,&q->score); //輸入第i個結點的數據
p->NEXT = q; //使第i-1個結點的成員NEXT指向第i個結點
p = q; //使p指向第i個結點
}
p->NEXT = NULL; //使最后個結點的NEXT成員不指向任何結點
printf("The information:\n");
for(p=HEAD;p!=NULL;) //當p不指向任何一個結點時結束循環
{
printf("%d\t%.2f\n",p->num,p->score); //輸出當前結點的數據
p = p->NEXT; //使p指向下一個結點
}
return 0;
}

|
|