日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用线性链表基本操作完成两个有序线性表的合并

發(fā)布時間:2024/4/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用线性链表基本操作完成两个有序线性表的合并 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

La、Lb線性鏈表升序排列,將結(jié)果放在Lc鏈表里。之前有文章寫過兩個有序鏈表的合并

區(qū)別在于,前面的做法是保留La的頭節(jié)點,free掉Lb的頭節(jié)點,將余下節(jié)點串起來。這種方法是面向過程編程

而現(xiàn)在討論的做法,是單獨(dú)建立一個Lc鏈表,利用一些已經(jīng)寫好的基本操作函數(shù)來完成,這種模塊化編程做法實際上還簡單些。不光模塊函數(shù)里寫不了幾行,在調(diào)用這些函數(shù)時減少了不必要的瑣碎過程的思考時間。

?

該做法的核心思想:將每輪比較過后偏小的那個節(jié)點從相應(yīng)鏈表中刪除(這是頭節(jié)點的指針不會指向該節(jié)點了,但該節(jié)點的空間依舊保留),append(附加)到Lc鏈表。pa、pb始終指向當(dāng)前La、Lb鏈表的第一個節(jié)點(頭節(jié)點后面那個),最后會free掉La、Lb的頭節(jié)點

?

代碼如下:

#define ERROR 0 #define OK 1 typedef int Status; typedef struct LNode {ElementType data;struct LNode *next; } *PtrToNode;typedef struct //查下struct的格式 {PtrToNode head,tail;int len; }LinkList;Status initList(LinkList &L) {//申明結(jié)構(gòu)體變量要不要malloc?L.len = 0;L.head = L.tail = (struct LinkList *)malloc(sizeof(struct LinkList));//shi bu shi struct LinkList return OK; }int getCurElem(PtrToNode p) {return p->data; }PtrToNode getHead(LinkList &L) {return L.head; }PtrToNode NextPos(LinkList &L,PtrToNode node) {return node->next; }void delFirst(LinkList &L,PtrToNode q) {head = getHead(L);q = head->next;head->next = head->next->next; }void append(LinkList &L,PtrToNode q) {L.tail->next = q;L.tail = q; }void freeNode(PtrToNode node) {free(node); }Status MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) {PtrToNode p;int a,b;if(!initList(Lc)) return ERROR;PtrToNode ha = getHead(La);PtrToNode hb = getHead(Lb);PtrToNode pa = NextPos(La,ha);PtrToNode pb = NextPos(Lb,hb);while(pa && pb) {a = getCurElem(pa);b = getCurElem(pb);if(a <= b) {delFirst(La,q);//將首節(jié)點刪除,并將地址賦給q append(Lc,q);pa = NextPos(La,ha);} else {delFirst(Lb,q);append(Lc,q);pb = NextPos(Lb,hb);}}if(pa) {append(Lc,pa);} else {append(Lc,pb);}freeNode(ha); freeNode(hb);return OK; } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/gabygoole/p/5554866.html

總結(jié)

以上是生活随笔為你收集整理的利用线性链表基本操作完成两个有序线性表的合并的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。