一、链表的剩下操作
- listLinkPtr.h
cpp
//任意位置删除
int index_del(linkListPtr H, int index);
//按位置修改
int index_change(linkListPtr H, int index, DataType e);
//按值查找返回地址
linkListPtr node_addr(linkListPtr H, DataType e);
//反转
//int node_rever(linkListPtr H);
//销毁
void my_free(linkListPtr H);
- listLinkPtr.c
cpp
//------------------------------------------------------------------
//任意位置删除
int index_del(linkListPtr H, int index)
{
//判断所接受的链表是否合法
//判空
//判断删除位置是否合法
if(NULL== H || empty(H) || index<1 || index>H->len)
{
printf("删除失败!\n");
return 0;
}
//定义一个指针指向删除位置的前一个节点
linkListPtr q = H;
for(int i=0; i<index-1; i++)
{
q=q->next;
}
//删除
linkListPtr p = q->next;
q->next=q->next->next;
free(p);
p=NULL;
//删除成功,链表长度自减
H->len--;
return 1;
}
//按位置修改
int index_change(linkListPtr H, int index, DataType e)
{
//判断所接受的链表是否合法
//判空
//判断删除位置是否合法
if(NULL== H || empty(H) || index<1 || index>H->len)
{
printf("修改失败!\n");
return 0;
}
//定义一个指针指向要修改位置的节点
linkListPtr p = H;
for(int i=0; i<index; i++)
{
p=p->next;
}
//修改数据
p->data=e;
return 1;
}
//按值查找返回地址
linkListPtr node_addr(linkListPtr H, DataType e)
{
//判断所接受的链表是否合法
//判空
if(NULL== H || empty(H))
{
printf("查询失败!\n");
return 0;
}
//定义一个指针指向要查询的值的节点位置
linkListPtr p = H;
for(int i=0; i<H->len; i++)
{
p = p->next;
if(p->data == e)
{
return p->next;
}
}
printf("无此数据!\n");
return NULL;
/*
//for循环以外的另一种方法
while(p->next != NULL)
{
p = p->next;
if(p->data == e)
{
return p->next;
}
}
printf("无此数据!\n");
return NULL;
*/
}
/*
//反转
int node_rever(linkListPtr H)
{
//判断所接受的链表是否合法
//判空
if(NULL== H || empty(H))
{
printf("查询失败!\n");
return 0;
}
//
}
*/
//销毁
void my_free(linkListPtr H)
{
//判断所接受的链表是否合法
if(NULL == H)
{
printf("销毁失败!\n");
return;
}
linkListPtr p = H;
for(int i=0; i<H->len; i++)
{
p = H;
for(int j=0; j<H->len-i-1; j++)
{
p = p->next;
}
free(p->next);
p=NULL;
}
free(H);
H=NULL;
p=NULL;
printf("销毁成功!\n");
}
- main.c
cpp
printf("-----------------------\n");
//任意位置删除
index_del(H, 3);
show(H);
//按位置修改
index_change(H, 3, 99);
show(H);
//按值查找返回地址
linkListPtr p = node_addr(H, 99);
printf("%p\n", p);
//反转
//node_rever(H);
//show(H);
//销毁
my_free(H);
H=NULL;
return 0;
- 执行结果
二、链表知识点思维导图