找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6549|回复: 0
收起左侧

c语言中的链表-用结构体和指针构造链表

[复制链接]
ID:73477 发表于 2015-2-10 17:42 | 显示全部楼层 |阅读模式
/************************************************************************************

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





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表