1.双向链表按位置删除
int site_dele(double_linklist* list,int n)
{
if(list==NULL || list->len==0 || n<1 || n>(list->len))
{
if(list==NULL)
{
printf("删除失败\n");
}
else if(list->len==0)
{
printf("删除失败>>链表元素为空\r\n");
}
else printf("删除失败>>非法位置\r\n");
return -1;
}
int i=0;
double_linklist* p = list;
for(i=0;i<n;i++) p=p->next;
if(p->next!=NULL) p->next->prev=p->prev;
p->prev->next=p->next;
printf("删除元素为 %c\n",p->data);
free(p);
p=NULL;
list->len--;
}
2.双向链表按位置修改
int site_modify(double_linklist* list,int n,char num)
{
if(list==NULL || list->len==0 || n<1 || n>(list->len))
{
if(list==NULL)
{
printf("查找失败\n");
}
else if(list->len==0)
{
printf("链表元素为空\n");
}
else printf("查找失败\n");
return -1;
}
double_linklist* p=list;
int i=0;
for (i=0;i<n;i++)
{
p=p->next;
}
p->data= num;
printf("修改成功\r\n");
return 0;
}
3.双向链表按位置查找
int site_find(double_linklist*list,char pos )
if(list==NULL || pos<1 || pos>len)
{
return -1;
}
{
double_linklist *p=list;
for(int i=0;i<pos;i++)
{
p=p->next;
}
printf("%c\n",p->data);
return p->data;
}
4.双向循环链表头插
int insert_head(loop_double_link L,datatype e)
{
//1,判断是否创建
if(L==NULL)
{
return -1;
}
//2,插入s
loop_double_link s=create(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.双向循环链表尾插
int insert_rear(loop_double_link L,datatype e)
{
//1,判断是否创建
if(L==NULL)
{
return -1;
}
//2,插入s
loop_double_link s=create(0);
if(s==NULL)
{
return -1;
}
loop_double_link *p=L->prev;
s->data=e;
s->next=p->next;
s->prev=p;
p->next->prev=s;
p->next=s;
L->len++;
return 0;
}