-
int InitLink(pNode *h)
函数功能:链表初始化
函数参数:头指针的地址
函数返回值:成功返回success,失败返回failure链表初始化即为给头结点分配空间并初始化指针域。在定义头指针后它还是个野指针,给它分配空间就会得到一个新地址,所以需要传指针的指针来进行指针值修改。
-
int InsertLink(pNode h, int p, int num)
函数功能:插入元素
函数参数:头指针、插入的位置、插入的元素
函数返回值:成功返回success,失败返回failure先进行入参判断,是否空指针
while循环是从头指针开始,直到要插入的位置结束,不过要考虑一些特殊情况,如果p值过大,超出链表的长度,那么到最后一个元素就停止即指到了NULL地址。
while中的判断是为了保证循环的正常进行以及防止超出范围。if语句就是对函数执行情况的反馈,如果传入的参数符合函数执行条件就继续,否则直接返回执行失败的信息。
给即将插入的元素申请第一地址,接下来就是链表之间地址信息的交换。新插入的元素将自己的地址交给前一位,将后一位的地址存入,再把数据存入即插入完成。 -
int TraverseLink(pNode h);
函数功能:遍历链表,打印出数值
函数参数:头指针
函数返回值:成功返回success,失败返回failure定义一个指针变量,从头指针往后移动直到最后一个NULL结束,把经过的元素都打印。
-
int GetElem(pNode h, int p)
函数功能:给出一个位置,获取该位置处的数值
函数参数:头指针 值所在位置
函数返回值:所在位置的数据值
定义一个指针,从头结点开始移动,再定义一个标记值,移动一下就加一,用来判断是否到达了指定位置。while (k < p && t != NULL)
,while的循环条件, t != NULL是为了确保如果位置值输入超出了链表长度时,指针的移动会停止,即遇到最后一个元素后下一个就是NULL地址。if (!t)
是为了判断是否输入正确,提供返回值告诉main函数运行情况。 -
int LocateElem(pNode h, int e)
函数功能:给出一个数值,得出该数值在链表中第一次出现的位置
函数参数:头指针 给出的数值
函数返回值:在链表中的位置定义一个指针,从第一个结点开始移动,再定义一个标记值,记录指针所在链表的位置,移动一次加一。当结点元素与所给元素相同,就返回此时的标记值。不符合继续往后移动。若移到链表末端即下一个指向NULL了还没有和所给值一致的,就返回failure,没有这个值。
-
int LengthLink(pNode h)
函数功能:得出链表的长度
函数参数:头指针
函数返回值:长度值定义一个指针从头指针开始,定义一个变量计数,到最后一个NULL结束,返回计数的变量的值‘’
-
int PriorElem(pNode h, int num)
函数功能:得出指定元素的前驱
函数参数:头指针、指定的元素值
函数返回值:前驱值需要返回前驱,但是这个链表只有往后指的(这个是单向链表),无法得出前一个元素。我们可以通过
t->next->data
,先指向后一个,如果后一个等于指定的元素,就输出该元素的值(是后一个元素的前驱)。 -
int NextElem(pNode h, int num)
函数功能:得出指定元素的后继
函数参数:头指针、指定的元素值
函数返回值:后继值在循环条件的判定上,思路与前驱类似,因为最后一个元素没有后继,所以对空指针的判断要判断后一个。
-
int ReverseLink(pNode h)
函数功能:将链表反置
函数参数:头指针
函数返回值:成功返回success,失败返回failure本质就是各个结构体元素里面的指针值的变动。第一个值变为最后一个,因为最后一个元素的标志是指针域里是NULL,所以把NULL给第一个元素,然后通过循环,分别把指针指向的结构体变动。指针如果直接覆盖掉,原来的值就没了,所以定义一个指针用来存放之前的指针,将之前的指针地址转移到另一个指针中去。
-
int LinkDel(pNode h, int p)
函数功能:删除链表中的元素
函数参数:头指针、所要删除元素的位置
函数返回值:成功返回删除的值,失败返回failure删除结点,先定位,再删除。定位部分和插入的做法一致。定义一个指针从头指针开始移动到所要删除位置的前一个。然后进行指针域的交换。就是直接将后一个结点的地址给前一个结点,这样所要删除的结点就没有指针指向它了,就可以当做从这个链表里面“删除”了。最后将它的空间释放。
-
int ClearLink(pNode h)
函数功能:删除链表
函数参数:头指针
函数返回值:成功返回success 失败返回failure删除链表就是将里面的元素全部删除。使得头指针指向为NULL。就是将删除链表操作进行循环,直到链表末端。
-
int DestroyLink(pNode h)
函数功能:销毁链表
函数参数:头指针
函数返回值:成功返回success 失败返回failure销毁链表和清空链表的区别在于。清空了链表后还可以往里面再加入新的元素,而链表被销毁后就不能再添加元素了。体现在删除链表保留了头指针,所以还可以继续往后面的地址指向,所以将头指针也删除了,即将他的空间释放,就相当于销毁了链表。
链表及其相关函数(理解总结)
最新推荐文章于 2024-08-22 14:28:16 发布