C语言程序设计进阶 - 第5周:链表

5.1可变数组

视频1

数组一旦定义好,就没有办法改变大小了。

定义结构的时候,一般不要定义成指针,因为一是,这样不容易初始化本地变量;二是,后续使用的时候,可能会忘记这个是一个指针类型。因此,在上面程序第7行,写的是“} Array;”而不是“ } *Array; ”

在 _ARRAY_H_中逐一实现代码。

1、创建一个可变长度的数组

视频2

2、释放这个数组

3、返回可变数组的大小

4、查找数组中的元素

函数定义的返回值,前面有 * 号的原因是,这个样可以使用蓝色选中的字直接对其中的内容进行赋值。如果仅仅是返回数值,就没有办法直接进行赋值。

5、取值,赋值

视频3,可变数组自动增长

5.2链表

视频1

上面的可变数组,存在问题,一是,每次申请大一点的内存,都要拷贝一次;二是,我们每次申请的空间,每次跟在上次的后面,可能后期再申请的时候,没有这么大的内存了。因此,应该使用链表。

视频2,初始化一个链表

我们想象之中,应该有一个这样的结构。

具体实现的代码如下:

注意,第六行,还不可以直接使用Node来定义,因为在那时候还没有开始定义。

视频3,链表的函数

如果我们将上面截图的代码中,选择中间的部分作为一个新的函数叫add(), 函数如下,会有一些问题,就是41行的head并不对19行的head造成影响。因此需要改变。有四种方法,一种比一种更优。

法一: Node * head;  作为全局变量,但是全局变量是有害的。

法二;add() 将 head 返回。但是使用你函数的程序员必须不能忘记返回这个 head 。

法三:不传 head 进去,传递 head 的指针进去。这种方法已经不错了,但是还有第四种办法。

法四:

定义一个结构

表面看起来和法三是一样的,但是这样有一个好处,传进去的是我们自己定义的结构,方便以后扩充。例如:

视频4,链表搜索

蓝色部分是经典的写法~

下面是将这一段取出,作为一个新的函数。

下面是搜索读进的一个数,是不是在链表中。

视频5,删除

注意因为上面以来,我们是单向链表,因此找到p->value之后,没办法找到p 前一个的地址,因此,需要另一个指针 q, 让 q 来指向 P 的前面一个结点。思路如下:

代码实现如下:

注意,箭头左边的变量一定要检查是不是NULL;因此此时, 我们应该格外注意检查一下 q 指针是不是 NULL (也就是 我们要删除的 p 在 第一个结点上)。 因此代码应该如下书写:

视频6,链表的清除

把整个链表进行清除。思路如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值