龙空技术网

数据结构-线性表-单链表02-3

华敏IT教育 134

前言:

今天朋友们对“c语言创建线性表代码怎么写”可能比较注重,咱们都需要学习一些“c语言创建线性表代码怎么写”的相关文章。那么小编也在网络上收集了一些对于“c语言创建线性表代码怎么写””的相关知识,希望看官们能喜欢,姐妹们一起来了解一下吧!

建立单链表的前插法。

从空表开始,重复读取数据,生成新节点,将数据存入新节点的数据域中,然后将新节点插入链表的前端。你需要做什么呢?

同学们继续,刚刚介绍了单链表的两种建立方法,一种是前插法,一种是尾部插入法。如果需要这个视频,它是flash动画,可以发给大家。

在课堂上演示一下,需要安装插件。安装插件前,先看一下顺序表。因为时间不够,没有念表。第一个是单链表的初始化。

看一下这里,第一个动画有点快。我已经调整了速度,已经很慢了。将next域设置为nar,另一个节点也创建了一个bug。这是第一个动画。

然后是建立取指标列表的取值。按值回车,单列表插入先不管,先看一下单列表的前插法。这里假设四个字相符。其实已经分析过了,这应该是前插法。调整速度,大家看一下附加节点。

第二个节点也是在l后面插入的。下一个点,先将后面的节点存储到它里面,然后再指向它。同样的道理。最后一个ok,看到没有?这里是前插法,今天看一下后插法。

后插法需要两个指针air和尾串。air还是这几个数据。首先点首节点,附加节点。初始化时,r和l指向同一个节点。每插入一个节点到后面,r都要移动到最后一个。看一下p指向当前节点,然后练习。p指向最后一个节点,然后又练习。然后又练习。注意顺序。两个顺序不同,最后建立后刚好是逆转的。所以考试时,如果需要将一个表倒置,可以用这个方法。就搞定了。

如果是用链表,如果是顺序表就有点复杂了,涉及到空间分配问题。如果在链表上倒立,可能需要分配一个节点,然后相当于拿到前面的顺序,或者是如何改变顺序,这个地方没有思考。接下来再演示一下,前面介绍过的单链表已经建立好了。假设这个单列表已经完成初始化。循环链表可以从任意一个结点位置找到其他所有结点,而单链表无法实现。循环链表没有明显的尾端,如何避免死循环?循环条件为p=NULL或p=L,表示无头结点。

循环链表有时不给出头指针,而给出尾指针,可以更方便地找到第一个和最后一个结点。如何查找开始结点和终端结点?注意这里的a、b、c、d、e代表元素,小写的一代表保存元素,数据部分需要注意。

假设已经找到要查找的结点,则将该结点的值保存在e中,结束搜索过程。下一个位置继续搜索。寻找元素的方法是什么?

从参数中取出元素,然后在循环链表中搜索。如何找到元素?

以a、b、c、d、e代表元素,从循环链表中的任意一个接口开始搜索。

找到元素后,将其值保存在e中,结束搜索过程。下一个位置继续搜索。

插入和删除元素的过程相似。插入元素时,将元素的值保存在b中,并将b的地址作为新结点的地址。删除元素时,删除第三个元素,然后将b的地址作为新结点的地址。注意,这些操作都可以通过单向列表实现。

接下来看一下双项链表的插入和删除操作。

循环链表中最主要的问题是避免重复,否则会进入死循环。例如,在做游戏时,需要使用循环链表来存储游戏参与者的信息。

列表可以存储多个元素,避免了重复。如何使用列表存储元素?

列表可以存储多个元素,避免了重复。在循环链表中,需要使用列表来存储元素。

列表的另一个作用是标识元素的位置。

列表可以存储多个元素,避免了重复。在循环链表中,需要使用列表来存储元素。

列表的另一个作用是标识元素的位置。p不等于拉二或p不等于l,即没有头结点,也没有附加头结点来判断是否已经到达了某个位置。指针又指向了附加结点或指到了头元素,此时知道了头元素,因为没有附加头结点,所以p指针后面不需要带lix。如果有附加头结点,则p指针后面需要带lix。lix指针指向自身,这种情况下已经到达了末尾,即p指针等于lix指针。

继续看说明,循环列表有时不给出头指针,而是给出尾指针,此时的操作方式有所不同。原来air指向它,现在没有了,只使用了一个rail,rail指向最后一个元素,要通过air指向它。real the next才能找到附加结点,观察意思。如果像这种情况下要判断列表是否到达了末尾,那么条件应该是real的next等于什么?如果它不为空,则real的next的next等于a1,如果为空,则说明已经到达了末尾。因此,可以通过比较real的next的next是否为空来判断列表是否到达了末尾。

接下来看循环列表的合并。这也是经典题目,包括之前讲的创伤单向列表、创伤手插尾插、创建循环列表、循环列表的操作转换等。这些都是研究生考试必须复习的题目。循环列表的合并主要考虑两个循环列表都有附加结点的情况,最后合并后需要删除一个附加结点,只保留一个。

假设t、a、t、b分别是两个循环列表,此时使用了尾指针进行合并。在这种情况下,需要通过a、a的next来找到附加结点。如果最后合并了,如果不考虑顺序,可以将tb的元素放在tn的后面。

比如说a、n后面是b1到bn的元素,如果没有顺序,我们就需要一个个比较,这就麻烦了。如果有顺序,我们就需要比较两条两个列表,这也很麻烦。那么,小的元素应该放在前面,然后再比较下一个,比完小的再放进去,这也是一样的道理。

现在假设最简单的情况,如果要合并,就要考虑是插入到头部还是插入到尾部。如果插入到尾部,就可以直接在an后面增加一个元素,然后让bn的next等于for,这很简单。如果要插入到头部,就需要找到t的类似,t的next里面存储的是t b的next。

最后,删除的时候需要删除蓝色深蓝色的部分,这样就可以了。这个算法很简单,不需要考虑顺序。如果要考虑顺序,难度就会增加。

如果用顺序表或者其他数据结构来实现这个算法,可以想象成玩游戏,多个人组成一个圆圈,从第一个人开始数到第三个,第三个必须站在第一排,这有点残酷。

这些问题大家应该都能解决。我们可以得出结论,循环便利列表只要不是空的,就继续计数。可以使用一个数字,比如n。n等于一二三,然后下一次n又等于一二三,那么为三的那个节点就需要删除。删除前后的指针就可以了。实际上这样比顺序表更方便,您看懂了吗?如果需要移动顺序表,那就真的有些麻烦了,需要更改两个指针。就这样。表格在实现之前已经说明了,我们学习这么多数据结构,到底哪一个更好,哪一个更适合项目和程序呢?这取决于数据的使用方式。比如,如果数据只是用于查询,而不经常修改或插入删除,那么使用顺序存储就比较合适。如果数据需要频繁删除,那么顺序存储就不太适合了。那么,像刚才那样的数据,应该使用链式存储。您明白了吗?链式存储不需要额外的空间。如果不保存数据,只需要打印出每一列的顺序,那么不需要增加空间。如果需要保存数据,就需要额外的空间。如果数据一直在减少,那么不需要增加空间。这是具体算法的问题,同学们可以自己解决。这些问题都是约数问题和循环问题的变形,同学们应该比较熟悉。接下来是一个比较复杂的问题,就是双向列表。

标签: #c语言创建线性表代码怎么写