链表是C语言数据结构的难点但同时也是重点。学好它对整个思维的构建都是有帮助的!
下面是我的一点看法,如有错误,恭请各位大佬指正。
我们都知道在C语言中有数组和链表两种可以存储多个同类型数据的工具,但是学过数组的人应该意识到数组有其局限性:数组在存储数据之前必须声明长度,以便系统为数组分配内存( 数据个数*sizeof(数据类型)),而且长度一经声明就确定,不可更改。这使增删数据,变得异常困难。
但链表不同,在使用链表之前没必要声明长度,如下表:
这只是个结构体,结构体包括一个数据域和指针域。简单点来说就是这个结构体有个数据和指针。
用malloc函数在内存中开辟出一个结构体的内存并返回一个void型的指针,C语言规定void型指针可以强制转换成其他类型的指针。
在这个结构体后面不断创造新的结构体,并在结构体中输入数据,然后让上一个结构体的指针存储这个结构体的指针的地址(通俗点说就是在上一个结构体中有栋房子,房子中有数据和如何到达下一栋房子的地图)。然后让这个结构体的指针指向NULL,用for循环就可以实现创建了。
在上面的图片中,有个p -> every = s,这个其实可以这样理解:p是指向结构体的指针,这个结构体中有个指针every,p -> every就是这个结构体中的every指针,然后把s(下一个结构体的指针)赋给了every,那么在某一结构体的指针域中存储着它下个结构体首地址,这样就各个结构体连接起来了,知道第一个就知道第二个,就知道第三个…………
希望可以对大家有所帮助。