dlink.c
#include "dlink.h"
//创建双向链表
dblist *db_create()
{
dblist *L = (dblist *)malloc(sizeof(dblist));
if(L==NULL)
{
printf("申请失败\n");
return NULL;
}
L->len=0;
L->pro=NULL;
L->next=NULL;
return L;
}
//判空
int empty(dblist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
else
return L->next==NULL?1:0;
}
//申请结点
dblist *node_create(int in_data)
{
dblist *p=(dblist *)malloc(sizeof(dblist));
if(p==NULL)
{
printf("结点申请失败\n");
return NULL;
}
else
{
p->data=in_data;
p->pro=NULL;
p->next=NULL;
return p;
}
}
//头插
int insert_head(dblist *L ,int in_data)
{
if(L==NULL)
{
printf("r入参为空\n");
return -1;
}
dblist *p=node_create(in_data);
if(p==NULL)
{
return -2;
}
if( empty(L))
{
L->next=p;
p->pro=L;
p->next=NULL;
}
else
{
p->next=L->next;
p->next->pro=p;
p->pro=L;
L->next=p;
}
L->len++;
return 0;
}
//尾插
int insert_tail(dblist *L,int in_data)
{
if(L==NULL)
{
printf("r入参为空\n");
return -1;
}
dblist *tail=L;
while(tail->next!=NULL)
{
tail=tail->next;
}
dblist *p=node_create(in_data);
if(p==NULL)
{
return -2;
}
p->pro=tail;
tail->next=p;
p->next=NULL;
L->len++;
return 0;
}
//查找任意位置数据
dblist *search_pos(dblist *L,int pos)
{
if(L==NULL)
{
printf("入参为空\n");
return NULL;
}
if(pos<=0||pos>L->len)
{
printf("位置不合理\n");
return NULL;
}
dblist *p=L->next;
int i=1;
while(i!=pos)
{
p=p->next;
i++;
}
return p;
}
//任意位置插入
int insert(dblist *L,int pos,int in_data)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
dblist *temp=node_create(in_data);
if(temp==NULL)
{
return -2;
}
dblist *p=search_pos(L,pos-1);
if(pos==L->len+1)
{
p->next=temp;
temp->pro=p;
temp->next=NULL;
}
else
{
temp->next=p->next;
temp->pro=p;
p->next->pro=temp;
p->next=temp;
}
}
//遍历
int print_db(dblist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
dblist *p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
puts("");
return 0;
}
//任意位置删除
int del_pos(dblist *L,int pos)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
dblist *p=search_pos(L,pos);
if(pos==L->len)
{
p->pro->next=NULL;
free(p);
p=NULL;
}
else
{
p->pro->next=p->next;
p->next->pro=p->pro;
free(p);
p=NULL;
}
return 0;
}
dlink.h
#ifndef __DLINK_H__
#define __DLINK_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct list
{
union
{
int len;
int data;
};
struct list *next;
struct list *pro;
}dblist;
dblist *db_create();
int empty(dblist *L);
dblist *node_create(int in_data);
int insert_head(dblist *L,int in_data);
//尾插
int insert_tail(dblist *L,int in_data);
//查找任意位置数据
dblist *search_pos(dblist *L,int pos);
//任意位置插入
int insert(dblist *L,int pos,int in_data);
//遍历
int print_db(dblist *L);
//任意位置删除
int del_pos(dblist *L,int pos);
#endif
main.c
#include "dlink.h"
int main(int argc, const char *argv[])
{
dblist *L=db_create();
insert_head(L,10);
insert_head(L,50);
insert_head(L,30);
insert_tail(L,90);
insert_tail(L,70);
//insert(L,3,0);
del_pos(L,5);
print_db(L);
return 0;
}