dblist.c
#include "dblist.h"
dblist *db_create(){
dblist *L=(dblist *)malloc(sizeof(dblist));
if(L==NULL){
return NULL;
}
L->len=0;
L->pro=NULL;
L->next=NULL;
return L;
}
//创建结点
dblist *db_note(){
dblist *p=(dblist *)malloc(sizeof(dblist));
return p;
}
//判空
int db_empty(dblist *L){
if(L==NULL){
return 0;
}
return L->next==NULL?1:0;
}
//头插
int insert_head(dblist *L,int data){
L->len++;
int flag;
dblist *p=db_note();
flag=db_empty(L);
if(flag==1){
L->next=p;
p->pro=L;
p->next=NULL;
p->data=data;
}else{
p->next=L->next;
p->pro=L;
L->next->pro=p;
L->next=p;
p->data=data;
}
}
//尾插
int insert_end(dblist *L,int data){
L->len++;
dblist *p=db_note();
while(L->next!=NULL){
L=L->next;
}
L->next=p;
p->pro=L;
p->next=NULL;
p->data=data;
}
//任意位置插入
int any_insert(dblist *L,int data,int index){
L->len++;
dblist *p=db_note();
for(int i=0;i<index-1;i++){
L=L->next;
}
if(L->next==NULL){
L->next=p;
p->pro=L;
p->next=NULL;
p->data=data;
}else{
L=L->next;
dblist *p=db_note();
p->next=L;
p->pro=L->pro;
L->pro->next=p;
L->pro=p;
p->data=data;
}
}
//遍历
int print(dblist *L){
L=L->next;
while(L!=NULL){
printf("%d\t",L->data);
L=L->next;
}
printf("\n");
}
//任意位置删除
int any_delete(dblist *L,int index){
dblist *temp=L;
if(index==1&&L->next->next==NULL){
free(L->next);
L->next=NULL;
return 0;
}
for(int i=0;i<index-1;i++){
L=L->next;
}
dblist *temp2=L->next;
L->next->next->pro=L;
L->next=L->next->next;
free(temp2);
temp2=NULL;
temp->len--;
}
main.c
#include "dblist.h"
int main(int argc, const char *argv[])
{
dblist *L=db_create();
insert_head(L,40);
insert_head(L,30);
insert_end(L,50);
insert_end(L,60);
any_insert(L,50,2);
any_delete(L,2);
print(L);
return 0;
}
dblist.h
#ifndef __dblist_H__
#define __dblist_H__
#include <stdlib.h>
#include <stdio.h>
typedef struct list{
union{
int len;
int data;
};
struct list *pro;
struct list *next;
}dblist;
dblist *db_create();
dblist *db_note();
int db_empty();
int insert_head();
int insert_end();
int any_insert();
int print();
int any_delete();
代码实现