【 tulaoshi.com - 编程语言 】
                             
                            双链表其实 也没什么 只是多了一个前置链而已 
双链表的定义 
代码如下: 
struct DNode 
{ 
int data; 
struct DNode *next; 
struct DNode *pre; 
};  
单链表的定义 
代码如下: 
view plaincopy 
struct DNode 
{ 
int data; 
struct DNode *next; 
};  
其他的可以看上一篇博客 大致相同 
代码如下: 
#ifndef HEAD_H 
#define HEAD_H 
#include iostream 
using namespace std; 
#include cassert 
#include cstdlib 
#include cmath 
#include sstream 
#include fstream 
#include string 
#include algorithm 
#include list 
#include queue 
#include vector 
#include deque 
#include stack 
#include bitset 
#include set 
#include map 
#endif 
struct DNode 
{ 
int data; 
struct DNode *next; 
struct DNode *pre; 
}; 
DNode *Creat() 
{  
DNode *head,*p,*s; 
head=(DNode *)malloc(sizeof(DNode)); 
p=head; 
int temp; 
while (cintemp&&temp) 
{ 
s=(DNode *)malloc(sizeof(DNode)); 
s-data=temp; 
p-next=s; 
s-pre=p; 
p=s; 
} 
head=head-next; 
p-next=NULL; 
head-pre=NULL; 
return (head); 
} 
DNode *Insert(DNode *&head,int num) 
{ 
DNode *p,*s; 
s=(DNode *)malloc(sizeof(DNode)); 
s-data=num; 
p=head; 
while (NULL!=p-next&&nump-data) 
{ 
p=p-next; 
} 
if (num=p-data) 
{ 
if (NULL==p-pre) 
{ 
s-next=head; 
head-pre=s; 
head=s; 
head-pre=NULL; 
} 
else 
{ 
s-pre=p-pre; 
p-pre-next=s; 
s-next=p; 
p-pre=s; 
} 
} 
else 
{ 
p-next=s; 
s-pre=p; 
s-next=NULL; 
} 
return(head); 
} 
DNode *Del(DNode *&head,int num) 
{ 
DNode *p; 
p=head; 
while (NULL!=p-next&&num!=p-data) 
{ 
p=p-next; 
} 
if (num==p-data) 
{ 
if (NULL==p-pre) 
{ 
head=p-next; 
p-next-pre=head; 
free(p); 
} 
else if (NULL==p-next) 
{ 
p-pre-next=NULL; 
free(p); 
} 
else 
{ 
p-pre-next=p-next; 
p-next-pre=p-pre; 
free(p); 
} 
} 
else 
{ 
coutnum" cound not be found"endl; 
} 
return head; 
} 
void Display(DNode *head) 
{ 
DNode *p; 
p=head; 
while (NULL!=p) 
{ 
cout(p-data)" "; 
p=p-next; 
} 
coutendl; 
}  
代码如下: 
#include "head.h" 
int main() 
{ 
DNode *head; 
head=Creat(); 
Display(head); 
#ifndef DEBUG 
cout"please input an num to insert:"; 
#endif 
int insert_num; 
while (cininsert_num&&insert_num) 
{ 
Insert(head,insert_num); 
Display(head); 
} 
#ifndef DEBUG 
cout"please input an number to delete:"; 
#endif 
int delete_num; 
while (cindelete_num&&delete_num) 
{ 
Del(head,delete_num); 
Display(head); 
} 
return (EXIT_SUCCESS); 
}