单链表初始化保姆级讲解

链表的学习是数据结构中的重中之重,一定要把这里彻底搞懂,后面的知识自然就是一通百通

首先我们在学习单链表的时候之前,要对指针有一定的了解,链表与线性表最大的不同就在于,线性表的每一个数据存储的地址是连续的的,而链表每一个节点的地址是随机分配的。

下面我们来逐一讲解一下每一步的操作:

1.所需要的头文件和自定义

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef  int Status;

2.创建结构体用来存放数据和下一节点的位置

typedef struct List {
	ElemType data;
	struct List* next;
}Node,*LinkList;

因为每创建一个节点都要用到一次该结构体,所以用typedef定义一个结构体以便以后使用,注意这里如果你对C语言学习了解较少的话,要回去学一学结构体,这里的Node是定义该结构体的名称并不是定义为该结构体的变量,而*LinkList也不是指向该结构体的指针变量而是定义指向该结构的指针名称

当定义结构体变量时代码为
Node a,b,c;
当定义指向该结构体变量时代码为
LinkList a,b,c;
注意当定义指向该结构体的指针时:Node *a;和LinkList a;是等价的

3.对链表的初始化

Status InitList(LinkList * L) {
    *L = (LinkList)malloc(sizeof(Node));
    if (!(*L))
    {
        return ERROR;
    }
    (*L)->next = NULL;
}

Status是在1.中定义的是int的别名,简单来说在这里我们可以认为Status=int;

参数LinkList *L:可能在初学时会感到困惑,为什么不是LinkList L,而是LinkList *L注意我们这里的形参是个二级指针,为什么要让二级指针做形参呢?这就要考虑到指针和变量的区别了,一个是传地址,一个是传值,结果是一个可以改变实参的值,一个不可以,而二级指针和一级指针的区别在于,二级指针改变的是一级指针的地址,而一级指针改变的是一级指针指向变量的值;在主函数中我们创建了一个头指针L,因为链表中的每一个节点都是临时申请的,头节点也不例外,所以我们首先要为头指针申请一个地址,就是上面的代码,而要改变主函数中的头指针L的地址就要用到二级指针了。为了程序的严谨性,还要对头节点L进行判空操作,以判断头节点L是否申请内存成功

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想很美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值