数据结构——双链表
1 #include <iostream> 2 using namespace std; 3 //构造双链表结构 4 typedef struct DLNode{ 5 int data; 6 struct DLNode *prior,*next;//定义前驱和后驱 7 }DLNode,*DLinkList; 8 void InitList(DLinkList &L){ 9 L=new DLNode; 10 if(!L) 11 cout<<"OVERFLOW!"<<endl; 12 L->next=NULL; 13 L->prior=NULL; 14 } 15 //创建双链表 16 void CreateList(DLinkList &L,int n){ 17 DLinkList p,q; 18 int i; 19 cout<<"输入数据:"<<endl; 20 q=L; 21 for(i=0;i<n;i++){ 22 p=new DLNode; 23 cin>>p->data; 24 p->next=q->next; 25 q->next=p; 26 p->prior=q; 27 q=p; 28 } 29 } 30 //获取双链表中序号的值 31 DLNode *GetElem(DLinkList L,int i){ 32 int j=1; 33 DLNode *p=L->next; 34 if(i==0) 35 return L; 36 if(i<1) 37 return NULL; 38 while(p&&j<i){ 39 p=p->next; 40 j++; 41 } 42 return p; 43 } 44 //根据序号在双链表中插入节点 45 void DLinkInsert(DLinkList &L,int i){ 46 DLNode *s,*p=GetElem(L,i-1); 47 s=new DLNode; 48 cout<<"输入插入节点值:"<<endl; 49 cin>>s->data; 50 s->next=p->next; 51 p->next->prior=s; 52 p->next=s; 53 s->prior=p; 54 } 55 //根据序号在双链表中删除节点 56 void DLinkDelete(DLinkList &L,int i){ 57 DLNode *q,*p=GetElem(L,i-1); 58 q=new DLNode; 59 q=p->next; 60 p->next=q->next; 61 q->next->prior=p; 62 } 63 //遍历输出 64 void TraverseList(DLinkList &L){ 65 DLinkList p; 66 p=L->next; 67 while(p){ 68 cout<<p->data<<" "; 69 p=p->next; 70 } 71 cout<<endl; 72 } 73 void main(){ 74 DLinkList L; 75 int n,x,y; 76 InitList(L); 77 cout<<"输入数据n:"<<endl; 78 cin>>n; 79 CreateList(L,n); 80 cout<<"输出数据:"<<endl; 81 TraverseList(L); 82 cout<<"输入插入值序号:"<<endl; 83 cin>>x; 84 DLinkInsert(L,x); 85 cout<<"输出数据:"<<endl; 86 TraverseList(L); 87 cout<<"输入删除值序号:"<<endl; 88 cin>>y; 89 DLinkDelete(L,y); 90 cout<<"输出数据:"<<endl; 91 TraverseList(L); 92 }
运行结果如下:


浙公网安备 33010602011771号