/*双链表的建立与实现*/ 

 #include<stdio.h> 

 #include<stdlib.h> 

 struct Dnode 

 { 

int data; 

Dnode *prior; 

Dnode *next; 
  

 };  

 /*双链表的初始化*/ 

 void Init_D(Dnode *&D) 

 { 

D=(Dnode*)malloc(sizeof(Dnode)); 

D->prior=NULL; 

D->next=NULL; 

D->data=0; 

 } 

 /*双链表的建立*/ 

 void Create_D(Dnode *&D) 

 { 

int n; 

int i; 

Dnode *Node,*point=D; 

printf("请输入要输链表的个数\n"); 

scanf("%d",&n); 

D->data=n; 

for(i=1;i<=n;i++) 

{ 

Node=(Dnode*)malloc(sizeof(Dnode)); 
  

scanf("%d",&Node->data); 

point->next=Node; 

Node->prior=point; 

point=Node; 

} 

point->next=NULL; 

 } 

 /*双链表的插入*/ 

 void Insert_D(Dnode *&D,int num,int sum) 

 { 

int i; 

D->data++; 

Dnode *Node=D,*point; 

for(i=1;i<=num;i++) 

Node=Node->next; 

for(i=1;i<=sum;i++) 

Node=Node->prior; 

point=(Dnode*)malloc(sizeof(Dnode)); 

point->data=34; 

point->next=Node->next; 

Node->next->prior=point; 

point->prior=Node; 

Node->next=point; 
  

 } 

 /*双链表的删除*/ 

 void Delete_D(Dnode *&D,int num,int sum) 

 { 

Dnode *point ,*Node=D; 
  

int i; 

for(i=1;i<=num;i++) 

Node=Node->next; 

for(i=1;i<=sum;i++) 

Node=Node->prior; 

Node->prior->next=Node->next; 

Node->next->prior=Node->prior; 

D->data--; 

 } 

 /*双链表的输出*/ 

 void Print_D(Dnode *&D) 

 { 

int i; 

Dnode *Node=D; 

for(i=1;i<=D->data;i++) 

{ 

Node=Node->next; 

printf("%d ",Node->data); 

} 

printf("\n"); 

for(i=i-1;i>0;i--) 

{ 

printf("%d ",Node->data); 

Node=Node->prior; 

} 

printf("\n"); 

 } 

 int main() 

 { 

Dnode *D; 

Init_D(D); 

Create_D(D); 

Print_D(D); 

Insert_D(D,5,3); 

Print_D(D); 

Delete_D(D,5,3); 

Print_D(D); 

return 0; 

 }