数据结构——双链表

 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 }

运行结果如下:

 

posted @ 2019-07-23 08:47  weigm*  阅读(102)  评论(0)    收藏  举报