链表的创建

节点
节点主要由以下两块组成:

  • 数据
  • 指向下一个节点的指针

链表
链表主要由以下几块组成:

  • 一系列节点
       每个节点至少包括:
       一条数据(任意类型)
       一个该节点类型的指针
       节点之间首尾相连(指向链表中下一个节点的指针)
  • 头指针:指向第一个节点的指针
  • 尾节点:节点指针指向空
    这里写图片描述

上图表示一个4个节点组成的链表,链表是由一系列的节点, 头指针(head)与尾节点(即最后一个next指向空);每个节点由data(数据)和next(指向下一个节点的指针)组成.

创建链表

创建链表主要涉及下面的几步:
1. 创建节点
2. 链:使每个节点的指针域存储后继节点的地址
3. 头:确定头文件(head)
4. 尾:确定尾节点

/*创建链表,输入学生的个数以及对应的学号与分数.*/
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
    long num;
    float score;
    struct student *next;
}STU;

STU *creat(int n)
{
    /*head node*/
    STU *Pt, *prePt, *head; //head为头指针,Pt为指针变量
    Pt = (STU *)malloc(sizeof(STU));  //申请一块空间,把这个地址返回到指针变量Pt中.
    if (Pt!=NULL)  //申请成功
    {
        scanf("%ld,%f", &Pt->num, &Pt->score);
        /*确定头节点*/
        head = Pt;  //确定Pt为头指针
        prePt = Pt;  //prePt用来保存链表当前的尾节点的地址,在此,头结点既是头结点又是尾节点.
    }
    else
    {
        printf("Failed.\n");
        exit(0);
    }

    /*other node*/
    int i;
    for (i=1; i<n; i++)
    {
        Pt = (STU *)malloc(sizeof(STU));
        if (Pt!=NULL)
        {
            scanf("%ld,%f", &Pt->num, &Pt->score);
            prePt->next = Pt;//prePt->next存储新的节点的地址,即Pt.(当前链表的尾节点为prePt)
            prePt = Pt;//prePt存储的都是当前链表的尾节点地址
        }
        else 
        {
            printf("Failed.\n");
            exit(0);
        }
    }
    /*链表尾节点指针域为空*/
    Pt->next = NULL;  //判断尾节点

    return head;
}
void main()
{
    printf("Please the number of students:");
    int num;
    scanf("%d", &num);
    creat(num);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值