生活随笔
收集整理的這篇文章主要介紹了
【数据结构】天勤 例2-3 (单链表归并操作)二、递减
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【例2-3】 A和B是兩個單鏈表(帶表頭結點),其中元素遞減有序。
設計一個算法,將A和B歸并成一個按元素值遞減有序的鏈表C,C由A和B中的結點元素組成
void merge(LNode
*A
,LNode
*B
,LNode
*&C
){LNode
*p
= A
->next
;LNode
*q
= B
->next
;LNode
*s
;C
= A
;C
->next
= NULL;free(B
);while(p
!=NULL && q
!=NULL){if(p
->data
<= q
->data
){s
= p
;p
= p
->next
;s
->next
= C
->next
;C
->next
= s
;}else{s
= q
;q
= q
->next
;s
->next
= C
->next
;C
->next
= s
;}}while(p
!=NULL){s
= p
;p
= p
->next
;s
->next
= C
->next
;C
->next
= s
;}while(q
!=NULL){s
= q
;q
= q
->next
;s
->next
= C
->next
;C
->next
= s
;}
}
#include <stdio.h>
#include <stdlib.h>typedef struct LNode{int data
;struct LNode *next
;
}LNode
,*LinkList
;void init(LinkList
&L
){L
= (LNode
*)malloc(sizeof(LNode
));L
->next
= NULL;
}void show(LinkList
&L
){LNode
*p
;p
= L
->next
;while(p
!=NULL){printf("%d ",p
->data
);p
=p
->next
;}printf("\n");
}void CreateListHead(LinkList
&L
){int n
,e
;L
= (LNode
*)malloc(sizeof(LNode
));L
->next
= NULL;printf("以下使用前插法創建單鏈表\n輸入要輸入元素的個數\n");scanf("%d",&n
);printf("逆序輸入%d個元素\n",n
);for(int i
=0;i
<n
;i
++){LNode
*temp
= (LNode
*)malloc(sizeof(LNode
));scanf("%d",&e
);temp
->data
= e
;temp
->next
= L
->next
;L
->next
= temp
;}
}void merge(LNode
*A
,LNode
*B
,LNode
*&C
){LNode
*p
= A
->next
;LNode
*q
= B
->next
;LNode
*s
;C
= A
;C
->next
= NULL;free(B
);while(p
!=NULL && q
!=NULL){if(p
->data
<= q
->data
){s
= p
;p
= p
->next
;s
->next
= C
->next
;C
->next
= s
;}else{s
= q
;q
= q
->next
;s
->next
= C
->next
;C
->next
= s
;}}while(p
!=NULL){s
= p
;p
= p
->next
;s
->next
= C
->next
;C
->next
= s
;}while(q
!=NULL){s
= q
;q
= q
->next
;s
->next
= C
->next
;C
->next
= s
;}
}int main(){LNode
*A
,*B
,*C
;init(A
);init(B
);init(C
);CreateListHead(A
);CreateListHead(B
);merge(A
,B
,C
);printf("\n以下為鏈表A和鏈表B歸并成一個按元素值遞減有序的鏈表C\n");show(C
);return 0;
}
總結
以上是生活随笔為你收集整理的【数据结构】天勤 例2-3 (单链表归并操作)二、递减的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。