标题: c语言中的链表-用结构体和指针构造链表 [打印本页]

作者: hutians    时间: 2015-2-10 17:42
标题: c语言中的链表-用结构体和指针构造链表
/************************************************************************************

用结构体和指针构造链表:
    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;
}










欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1