C语言入门必学的一个功能极为强大的数组—双向链表

链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。

为什么要学习链表?

链表主要有以下几大特性:

1、解决数组无法存储多种数据类型的问题。

2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。

3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。

作为有强大功能的链表,对他的操作当然有许多,比如:链表的创建,修改,删除,插入,输出,排序,反序,清空链表的元素,求链表的长度等等。

实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。

那么如何来创建一个链表呢?

我们写个程序演示一下:

C语言入门必学的一个功能极为强大的数组—双向链表

一般创建链表我们都用typedef struct,因为这样定义结构体变量时,我们就可以直接可以用LinkList *a;定义结构体类型变量了。

初始化一个链表,n为链表节点个数。

C语言入门必学的一个功能极为强大的数组—双向链表

修改链表节点值

修改链表节点值很简单。下面是一个传入链表和要修改的节点,来修改值的函数。

C语言入门必学的一个功能极为强大的数组—双向链表

删除链表节点

删除链表的元素也就是把前节点的指针域越过要删除的节点指向下下个节点。即:p->next = q->next;然后放出q节点的空间,即free(q);

C语言入门必学的一个功能极为强大的数组—双向链表

打算深入了解这个行业的朋友,可以加下小编的C/C++游戏编程学习裙:666+295+498,邀请码(怀念学c)不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00我都会开直播给大家分享C/C++游戏编程学习知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2018C/C++游戏编程学习教程),大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

插入链表节点

插入节点就是用插入前节点的指针域链接上插入节点的数据域,再把插入节点的指针域链接上插入后节点的数据域。

C语言入门必学的一个功能极为强大的数组—双向链表

输出链表

输出链表很简单,边遍历边输出就行了。

C语言入门必学的一个功能极为强大的数组—双向链表

结束语

好了,今天的知识就分享到这里,欢迎关注“怀念感觉12”,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习c/c++的文章。同时欢迎在下面评论区留言如何学习c/c++。

C语言入门必学的一个功能极为强大的数组—双向链表


分享到:


相關文章: