今天按原计划是想把顺序表的原理和实现分享给大家,不过在学习链表的时候发现以前一直忽略的一个问题。就是在之前写单链表的时候都是把头结点return出来,没去想过如果不用return关键字,怎么对节点进行操作。所以呢今天就跟大家分享一下,在函数中通过使用二级指针来对节点进行一些操作。
下面这几幅图是我之前创建节点的函数
可以看到之前呢我创建一个节点是在函数中把节点创建好之后,再通过return关键字把节点返回出来。虽然这样是比较方便,但是呢刚开始嘛,咱就多学几招。所以就给大家分享一下用二级指针来进行操作。
在开始之前我们得知道几个点,就是什么是指针?什么是结构体?malloc函数的作用?以及链表
指针
在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思就是通过它能找到以它为地址的内存单元。
结构体:机构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量,使用struct关键字创建结构体
malloc函数:malloc函数可以向内存申请一个连续可用的空间,并返回指向这块空间的指针
链表:我对于链表的理解就是,把一个节点划分为两个部分,一部分用来存放我们想要存放的数据,另一部分用来存放下一个节点的地址这样就把一个一个节点连了起来
首先我们先创建一个结构体变量,data就是存放我们自己的数据的地方,而next就是存放下一个节点地址的地方
然后就是初始化节点的函数,我们要传入的值pplist就是我们所创建的一个节点指针的指针,在函数中,首先使用malloc函数向内存申请一个空间,这就是一个节点,然后我们再把这个节点的赋值给pplist,这样我们的第一个节点就创建出来了
这中方法跟最开始我使用的方法的区别就是这个节点是在函数内部赋值给pplist的,是直接对pplist进行操作。
那么,为什么第一种需要有返回值,而第二种不需要呢?我们都知道,函数有形参和实参两种,对形参进行操作并不会对实参产生影响。第一种方法就是把我们在外面创建的节点拷贝一份,如果我们把向内存申请的空间直接赋值给形参,那么,在函数外面的实参不会改变。而第二种方法,是把我们在函数外面创建的pplit的地址传给了函数,这个时候再给他赋值就是直接对pplist所指向的内存及逆行操作,所以不需要有返回值。而pplist本身就是一个指针类型的变量,而我们又要把它的地址传递给ListInit函数,所以就要用到二级指针。
写的不好,还请轻喷