1.双向链表按位置删除
//delete_pos
int delete_pos(doublelink L,int pos)
{
if(L==NULL||pos<1||pos>L->len)
return -1;
doublelink p = L;
int i;
for(i=0;i<pos;i++)
{
p = p->next;
}
if(p->next!=NULL)
p->next->prev = p->prev;
p->prev->next = p->next;
free(p);
p = NULL;
L->len--;
}
2.双向链表按位置修改
//update_pos
int update_pos(doublelink L,int pos,datatype e)
{
if(L==NULL||pos<1||pos>L->len)
return -1;
doublelink p = L;
int i;
for(i=0;i<pos;i++)
{
p = p->next;
}
p->data = e;
}
3.双向链表按位置查找
//search_pos
int search_pos(doublelink L,int pos)
{
if(L==NULL||pos<1||pos>L->len)
return -1;
doublelink p = L;
int i;
for(i=0;i<pos;i++)
{
p = p->next;
}
printf("查找的元素为:%c\n",p->data);
}
4.双向循环链表头插
//insert_head
int insert_head(loopDoubleLink L,datatype e)
{
if(L==NULL)
return -1;
loopDoubleLink s = create_space(0);
if(s==NULL)
return -1;
s->data = e;
s->next = L->next;
s->prev = L;
L->next->prev = s;
L->next = s;
L->len++;
return 0;
}
5.双向循环列表头删
//delete_head
int delete_head(loopDoubleLink L)
{
if(L==NULL||L->next==L)
return -1;
loopDoubleLink p = L->next;
p->next->prev = L;
L->next = p->next;
free(p);
p = NULL;
L->len--;
return 0;
}
6.双向循环列表尾删
//delete_tail
int delete_tail(loopDoubleLink L)
{
if(L==NULL||L->next==L)
return -1;
loopDoubleLink p = L;
while(p->next!=L)
{
p = p->next;
}
p->prev->next = p->next;
p->next->prev = p->prev;
free(p);
p = NULL;
L->len--;
return 0;
}