收藏了?点个关注有干货哦!数据结构——链表学习编程的过程中,有一个非常重要的知识点——数据结构,但是呢,数据结构这一系列的知识当中有难有易,刚入门的小伙伴不一定能独立学会这一知识,所以,今天小编给大家讲一下数据结构当中比较简单的——双向链表。学习数据结构需要比较好的C语言功底(针对这篇文章来说),特别是指针这一块,因为小编接下来要讲的双向链表,就涉及到了很多指针的操作。
你们最喜欢的环节——实例教学首先呢,学习双向链表,我们得先学会如何去编写链表操作的有关函数,小编一共编写了4个函数:初始化链表、求链表成员个数、插入数据、删除数据。构建链表成员小编使用一个结构体来创建链表成员,这个结构体中有一个数据域、“标记”变量、两个指针,这两个指针分别指向前一个成员和后一个成员,数据域用于存放数据,“标记”变量用来标记当前成员在链表中的位置。
初始化链表这个函数很简单,只用了3行代码就完成了,具体实现步骤看下图
求链表成员个数在这个函数中我们需要申请一个list型的指针traverse,这个指针用于遍历整个表,用while()循环遍历整个表并计算成员个数。
数据插入这个函数稍稍有点复杂,在这里小编就不费时间去优化代码了,大致讲一下这个函数需要注意的地方叫就可以了(只针对于这篇文章),在这个函数中使用最多的就是if判断语句,其次是while()循环,if的嵌套并不多,非常容易理解。
首先,我们先用if语句判断用户插入数据的位置是否合法,如果不合法则退出函数,反之进行下一步操作。接下来我们进入到while()循环中,使用if语句判断插入位置是否位于末尾(末尾的插入操作不同),经过判断,如果插入位置不在末尾,那么我们将一步步将traverse指针移动到我们指定的位置。
插入数据完成之后,我们要重新将该链表进行整理,因为该链表增加了一位新成员,所以它的“标记”变量不许做出改变。小编在这里的思路是,将插入位置后面的所有成员中的“标记”变量加1。
看不懂没关系,文末有学习源码!数据删除数据删除函数相对于数据插入函数较简单,整体与数据插入函数差不多,只不过数据删除函数比数据插入函数少了几个判断语句而已。同样的,在删除数据函数中,我们一个可以遍历整个链表的指针,所以我们依然申请了名为traverse的指针,该指针可以移动到我们删除数据的位置,并进行下一步操作。
删除成员之后,我们要将所有链表成员进行整理排序,简单点将就是将成员中的“标记”变量减1,因为整条链表中少了一个成员,同样的,我们使用while()循环来完成这个操作。
程序测试结果在这篇文章的源码中,小编创建了一个只有一个成员的链表,然后向链表中分别插入2和3,并且这两个数据插入的位置是相同的,这样做是为了检测插入函数是否正常工作。在最后小编使用“求链表成员个数”函数求得整条链表的成员个数,并将打印在屏幕上。
输出结果
调试结果,可查看链表成员
学习源码获取本文一共1461个字,编写教学代码和书写文章一共用了3小时,所以小编在这里提一个小小的要求:只有小编的粉丝才可以获取源码哦!提醒:关注可以成为粉丝
领取专属 10元无门槛券
私享最新 技术干货