双向链表

来源:互联网 发布:软件著作权转让官费 编辑:程序博客网 时间:2024/06/03 22:45
双向链表 Dlelist
  1 #include<iostream>  2 using namespace std;  3   4 struct ListNode  5 {  6     int num;  7     char name[20];  8     ListNode *link;  9 }; 10  11 ListNode *first,*last; 12  13 void Create()//建立一个链表 14 { 15     ListNode *p,*q; 16     int i; 17     q=first;//新节点要把节点设为空 18     while(1) 19     { 20         p=new ListNode; 21         cout<<"输入学号:"; 22         cin>>p->num; 23         cout<<"输入姓名拼音:"; 24         cin>>p->name; 25         p->link=q->link; 26         q->link=p; 27         q=p; 28         cout<<"是否继续?(1/0)"; 29         cin>>i; 30         if(i==0) 31         { 32             cout<<"链表建立完毕。"<<endl; 33             break; 34         } 35     } 36     last=p; 37 } 38  39 void Output()//输出 40 { 41     ListNode *p=first->link; 42     while(p!=NULL) 43     { 44         cout<<"学号:"<<p->num<<":"; 45         cout<<"姓名:"<<p->name<<endl; 46         p=p->link; 47     } 48 } 49  50 ListNode* FindIndex(const int i)//查找第i个元素 51 { 52     if(i<=-1) return first; 53     ListNode *p=first->link; 54     int j=0; 55     while(p!=NULL&&j<i) 56     { 57         if(p->num==i) break; 58         p=p->link; 59         j++; 60     } 61     return p; 62 } 63  64 ListNode* Insert(int valua,int i)//插入一个值 65 { 66     ListNode *p,*q; 67     q=new ListNode;//申请一个新节点 68     p=FindIndex(i-1);//找到插入位置的前一位置,在它的后方插入VALUA 69     if(p==NULL) return NULL; 70     q->link=p->link; 71     q->num=valua; 72     p->link=q; 73     if(q->link==NULL) 74         last=q; 75     return q; 76 } 77  78 void RemoveAfter(ListNode *cl)//删除CL节点之后的一个节点 79 { 80     ListNode *newlink=cl->link; 81     if(newlink!=NULL) 82     { 83         cl->link=newlink->link; 84         delete newlink; 85     } 86 } 87  88 void RemoveCur(ListNode *cl)//删除单个节点 89 { 90     ListNode *p=first; 91     while(p->link!=cl) 92     { 93         p=p->link; 94     } 95     p->link=cl->link; 96     delete cl; 97 } 98  99 void length()//计算链表长度100 {101     int len=0;102     ListNode *p=first->link;103     while(p!=NULL)104     {105         p=p->link;106         len++;107     }108     cout<<"链表长度为:"<<len<<endl;109 }110 111 112 113 void main()114 {115     first=new ListNode;116     first->link=NULL;117     118     Create();119     Output();120 121     int m;122     cout<<"查找学号:";123     cin>>m;124     ListNode *n=FindIndex(m);125     cout<<n->num<<":"<<n->name<<endl;126 127     int del;128     cout<<"需要删除的学号:";129     cin>>del;130     ListNode *delet=FindIndex(del);131     RemoveCur(delet);132 133     Output();134     length();135 }
0 0