/*
* function: 按位置修改
* @param [ in]
* @param [out] 链表 修改的位置 修改的值
* @return 成功返回0 失败返回-1
*/
int update_pos(linklist L,int pos,datatype e)
{
//1,判断链表是否创建成功
//2,判断链表是否为空
//3,判断位置是否合法
if(L==NULL || L->next==NULL ||pos<1 || pos>L->len)
{
return -1;
}
//4,循环到pos位置,起名字p
linklist p=L;
for(int i=0;i<pos;i++)
{
p=p->next;
}
//5,修改
p->data=e;
return 0;
}
/*
* function: 按元素删除
* @param [ in] 链表 元素
* @param [out]
* @return 成功返回0 失败返回-1
*/
int delete_data(linklist L,datatype e)
{
//1,根据e找位置
int pos=search_data(L,e);
if(pos ==-1)
{
return -1;
}
//2,根据位置删除
delete_pos(L,pos);
return 0;
}
/*
* function: 按元素插入
* @param [ in] L:链表 key:要插入的值
* @param [out] e:被插入的值,查找
* @return 成功返回0 失败返回 -1
*/
int insert_data(linklist L,datatype e,datatype key)
{
//1,根据e找到位置
int pos=search_data(L,e);
if(pos==-1)
{
return -1;
}
//2,根据位置插入key
insert_pos(L,pos,key);
return 0;
}
/*
* function: 按元素修改
* @param [ in] 链表 被修改的e
* @param [out] 要修改的值key
* @return 成功返回0 失败返回-1
*/
int update_data(linklist L,datatype e,datatype key)
{
//1,根据e找位置
int pos=search_data(L,e);
if(pos==-1)
{
return -1;
}
//2,根据位置修改
update_pos(L,pos,key);
return 0;
}
/*
* function: 排序
* @param [ in]
* @param [out] 链表
* @return 无
*/
void bubble(linklist L)
{
//1,判断链表是否创建成功
//2,判断链表是否为空
if(L==NULL || L->next==NULL)
{
return;
}
//3,判断只有一个元,不参与比较
if(L->len==1)
{
printf("只有一个元素,无需排序\n");
return;
}
//3,冒泡排序
for(linklist i=L->next;i->next!=NULL;i=i->next)
{
int count=0;
for(linklist j=L->next;j->next!=NULL;j=j->next)
{
if(j->data >j->next->data)
{
datatype t=j->data;
j->data=j->next->data;
j->next->data=t;
count++;
}
}
if(count==0)
{
break;
}
}
}
/*
* function: 释放空间
* @param [ in] 链表
* @param [out]
* @return 返回NULL
*/
linklist free_space(linklist L)
{
if(L==NULL)
{
return NULL;
}
//循环删除
int n=L->len;
for(int i=0;i<n;i++)
{
delete_rear(L);
}
free(L);
L=NULL;
return L;
}
}