数据结构单向链表

//7.修改指定位置的数据 post 被修改的位置 data修改成的数据

int ChangePostLinkList(link_node_t *p, int post, datatype data)

{

//0.容错判断

if(post < 0 || post >=LengthLinkList(p))

{

perror("ChangePostLinkList");

return -1;

}

//1.将头指针指向被修改的节点

for(int i=0;i<=post;i++)

p=p->next;

//2.修改数据

p->data = data;

return 0;

}

//8.查找指定数据出现的位置 data被查找的数据 //search 查找

int SearchDataLinkList(link_node_t *p, datatype data)

{

//1.定义变量记录查找位置

int post=0;

//2.遍历链表,查找数据

while(p->next != NULL)

{

p=p->next;

if(p->data == data)

return post;

post++;

}

return -1;

}

//9.删除单向链表中出现的指定数据,data代表将单向链表中出现的所有data数据删除

int DeleteDataLinkList(link_node_t *p, datatype data)

{

//1.定义一个指针q指向头结点的写一个节点,此时可以看做q指向一个无头单向链表

link_list_t q = p->next;

//2.用q遍历链表,将每一个节点的数据域与data作比较,如果相同就删除该节点

while(q != NULL)

{

if(q->data == data)//如果相等,删除

{

p->next = q->next;

free(q);

q = p->next;

}

else//如果不相等,指针向后移动

{

p=p->next;

q=p->next;

}

}

return 0;

}

//11.清空单向链表

void ClearLinkList(link_node_t *p)

{

while (!IsEpLinkList(p))

DeletePostLinkList(p,0);

}

//10.转置链表

//解题思想:

//(1) 将头节点与当前链表断开,断开前保存下头节点的下一个节点,

//保证后面链表能找得到,定义一个q保存头节点的下一个节点,

//断开后前面相当于一个空的链表,后面是一个无头的单向链表

//(2) 遍历无头链表的所有节点,将每一个节点当做新节点

//插入空链表头节点的下一个节点(每次插入的头节点的下一个节点位置)

void ReverseLinkList(link_node_t *p)

{

//1.断开前

link_list_t q = p->next;

link_list_t temp = NULL;

//2.断开链表

p->next = NULL;

//3.遍历无头单向链表,依次插入头节点后面

while ( q != NULL)

{

temp = q->next;

q->next = p->next;

p->next = q;

q = temp;

}

}

上一篇:Kubernetes(K8s)的简介


下一篇:机器学习特征工程中常用的特征编码方法