本帖最后由 zhuzongzhen 于 2015-11-11 10:45 编辑
关于链表的一些看法(看完朱老师物联网大讲堂视频后的体会) 链表是个什么东西?它用来做什么用?为什么需要链表?
对于链表,最大的价值就是解决数组的两个缺陷;那么数组有哪两个缺陷呢?首先定义个数组int a[10]={0};在这里我们可以看到,1、只要我们把数组定义好以后,那么这个数组的大小就确定了,之后就无法再更改这个数组的大小了,那么如果这个数组长度不够存我们的数据怎么办?2、还有个缺陷就是只要我们把数组定义好以后,那么数组里面的类型就确定了,而且全部一样。
为了解决上面两个问题,于是就有了链表。如果我们把链表看做一个比较特殊的数组,我们访问数组的内容不是通过下标,而是通过它们之间的链接来访问,相对于数组来说就是访问方式不同了而已,链表的节点就像数组的一个元素。这么想来链表好像似乎很简单的样子了。
那么怎么样能形成链表。我们必须要有一个可以存放数据的空间变量,还要有一个与其他节点形成连接关系的一个变量,这个变量就要用指针来实现。而且要把这两个变量捆绑在一起。那么就只能用结构体了。
所以链表的一个节点的定义为: structlist_Node
{ int data;
struct list_Node *Next;
};
只要我这里的结构体指针指向下一个节点,那么这样一直下去直到其中一个指向NULL。就像链条一样。只要我们找到第一个节点的指针,那么整个链表我们都可以知道了,就像数组知道首地址一样。那么我们来看下链表的示意图:
填写图片摘要(选填)
所以只要知道head那么整个链表你就可以随意操作了。如果是数据长度不够,那么我们就插入一个节点就轻松解决了,多了就删掉没用的节点就ok了。
插入一个节点的示意图:
填写图片摘要(选填)
删除一个节点:填写图片摘要(选填)
那么这就是单链表,这种链表有个缺点就是只能从头指针向后访问。
于是乎就有了双向链表。双链表的本质与单链表一样。只是多了一个连接指针而已。
测试代码:
填写图片摘要(选填)
测试源代码
填写图片摘要(选填)
|