1.3.9 单向链表按位置修改
int change_pos(linklist l,int pos,datatype e)
{
if(l == NULL || l->next == NULL || pos<1 || pos>l->len)
{
printf("error\n");
return -1;
}
int i;
linklist p = l;
for (i = 1;i<=pos;i++)
{
p = p->next;
}
p->data = e;
return 0;
}
1.3.12单向链表按位元素修改
int change_data(linklist l,datatype e,datatype key)
{
if(l == NULL || l->next == NULL)
{
printf("error\n");
return -1;
}
linklist p = l;
int flag = find_data(l,e);
int i;
for(i = 0;i<flag;i++)
{
p = p->next;
}
p->data = key;
return 0;
}
1.3.11单向链表按元素删除
int delete_data(linklist l,datatype e)
{
if(l == NULL || l->next == NULL)
{
printf("error\n");
return -1;
}
linklist p = l;
int i;
for (i = 1;i<=l->len;i++)
{
p = p->next;
if(e == p->data)
{
delete_pos(l,i);
return 0;
}
}
return -1;
}
1.3.14 单向链表在给定元素前面插入
int data_insterhead(linklist l,datatype e,datatype key)
{
linklist s = creat_head(0);
if(s == NULL)
return -1;
int flag = find_data(l,e);
linklist p = l;
int i;
for (i = 1;i<flag;i++)
{
p = p->next;
}
s->data = key;
s->next = p->next;
p->next = s;
l->len++;
return 0;
}
1.3.16 单向链表的排序
void bubble(linklist l)
{
if(l == NULL || l->next == NULL)
{
printf("error\n");
return ;
}
datatype temp;
int i,j;
for (i = 1;i<l->len;i++)
{
linklist p = l->next;
int count = 0;
for (j = 0;j<l->len-i;j++)
{
if(p->data > p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
p = p->next;
count++;
}
if(count == 0)
break;
}
}
}
1.3.18 单向链表空间释放
void Free_space(linklist l)
{
if(l == NULL)
return ;
int i,n = l->len;//固定长度
for (i = 0;i<n;i++)
{
delete_head(l);//每执行一次delete_head(l)l->len会--
}
free(l);
l = NULL;
}