线性表相关操作,不全但会慢慢增加

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef struct Node{
 5     int data;
 6     struct Node *next;
 7 }Node;
 8 
 9 //头插法建立链表
10 Node *createListFromHead(int a[], int n){
11     Node *A = new Node();
12     A->next = NULL;
13     for(int i=0; i<n; i++){
14         Node *p = new Node();
15         p->data = a[i];
16         p->next = A->next;
17         A->next = p;
18     }
19     return A;
20 } 
21 
22 //尾插法建立链表
23 Node *createListFromEnd(int a[], int n){
24     Node *A = new Node();
25     A->next = NULL;
26     Node *p = A;
27     for(int i=0; i<n; i++){
28         Node * q = new Node();
29         q->next = NULL;
30         q->data = a[i];
31         p->next = q;
32         p = q;
33     } 
34     return A;
35 } 
36 
37 void show(Node *List){
38     Node *p = List->next;
39     while(p){
40         cout<<p->data<<endl;
41         p = p->next;
42     }
43 }
44 
45 void uni(Node *A, Node *B){
46     Node *Apre = A, *Anow = A->next;
47     Node *Bnow = B->next;
48     while(Anow && Bnow){
49         while(Bnow && Bnow->data < Anow->data){
50             Bnow = Bnow->next;
51         }
52         if(Bnow && Bnow->data != Anow->data){
53             Apre->next = Anow->next;
54             
55         }else{
56             if(!Bnow){
57                 break;
58             }
59             Apre = Apre->next;
60         }
61         Anow = Anow->next;
62         
63     }
64     
65         Apre->next = NULL;
66 //    cout<<Apre->data<<endl<<endl;
67 }
68 
69 void Merge(Node *A, Node *B){
70     Node *Apre = A, *Anow = A->next;
71     Node *Bnow = B->next;
72     while(Anow && Bnow){
73         while(Anow && Anow->data < Bnow->data){
74             Anow = Anow->next;
75             Apre = Apre->next;
76         }
77         Node *Bc = Bnow;
78         Bnow = Bnow->next;
79         Bc->next = Apre->next;
80         Apre->next = Bc;
81         Apre = Apre->next;
82     }
83     Apre->next = Bnow;
84 }
85 
86 int main(){
87     int a[]={1,2,4,6,8,9,11,13,17};
88     int b[]={0,3,5,6,10};
89 //    Node *A = createListFromHead(a, 9);
90     Node *A = createListFromEnd(a, 9);
91     Node *B = createListFromEnd(b,5);
92 //    uni(A, B);
93     Merge(A, B);
94     show(A);
95 //    cout<<endl;
96 //    show(B);
97 }

 

posted @ 2019-10-28 20:02  nefuer  阅读(171)  评论(0编辑  收藏  举报