王道数据结构使用C语言编写代码时的纰漏(一)——单链表的代码初始化,头插法代码以及运行

最近在看王道考研的数据结构的课程,课程逻辑清晰,但可惜都是伪代码,发现使用C语言编写时会出现各种状况,后来发现是C语言中使用了C++语法引入的引用,现在分享一下代码和改动思路:

一、节点以及链表初始化代码

这里值得注意的是,LinkList明明是节点指针(LNode *)类型,为什么在初始化函数里面传入参数还需要使用地址解析符 * 来解析其地址。其原因在于,虽然我们指向每个节点的都是使用的指针,一个内部的next指针依次相连,一个外部声明的指针*p用于挪动位置,做一些查询之类的移位操作。

但注意这里初始化需要传入的应该是指针的地址,我们在初始化做的工作起始就是让这个链表所占用空间不能有之前存在的“脏数据”,带头节点的单链表还需要额外初始化头节点。这两个操作的对象都应该是指针的地址,因为指针本身是存放所指向元素a1的地址的,所指向元素a1的地址是指针的值,而指针的地址才是我们想要的。

这行*L = (LNode *) malloc(sizeof(LNode)); 这行代码王道视频由于使用了引用,所以我们如果使用纯C语言代码运行,不能忘记给L前面加上 * ,作用是解析地址,因为我们传入的*L是指针的地址, 也就是指针的指针(LinkList * L=LNode** L),指针的指针指向上一级指针的地址,也就是说这个二级指针L存放的值是上一级指针(指向链表首元素的指针)的地址,所以得用地址解析符 * 获取这个二级指针的值,获取的值就是我们想要的头指针地址。(printf打印L出来的是*L的地址)

typedef struct LNode {
    int data;
    struct LNode *next;
} LNode, *LinkL
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值