c語言版資料結構之線性表歸併大概
阿新 • • 發佈:2019-01-23
線性表:n個具有相同特性的資料元素的有限序列。較為靈活,可根據需要増長或縮短。
兩線性表歸併演算法:(此時已知其元素按值非遞減排列)
在程式中,定義函式的形參取&Lc,是因為呼叫函式時,是將實參的函式值拷貝後在傳給實參,如若不取地址無法改變所要得到的線性表中的值。同理,此函式中應用相同原理呼叫的函式的原型分別是InitList(&L)、GetElem(L, i,&e)、ListInsert(&L,i,e)。void MergeList(List La, List Lb, List &Lc) { //已知線性表La和Lb中的資料元素按值非遞減排列。歸併La和Lb得到新的線性表Lc,Lc的資料元素也按值非遞減排列 InitList(Lc); int ai, bj; int i = j = 1; int k = 0; La_len = ListLength(La); Lb_len = ListLength(Lb); while( (i <= La_len) && (j <= Lb_len) ) { GetElem(La, i, ai); GetElem(Lb, j, bj); if(ai <= bj) { ListInsert(Lc, ++k, ai); ++i; } else { ListInsert(Lc, ++k, bj); ++j; } } while(i <= La_len) { GetElem(La, i++,ai); ListInsert(Lc, ++k, ai); } while (j <= Lb_len) { GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj); } } //MergeList
總體思想:對已經排好序的兩連結串列,依次比較其大小,將小的值存入所要得到的線性表,當其中一個線性表元素判別完後,將另一線性表的元素直接接在所要得到的線性表後。
此篇文章僅代表作為本小白的觀點,若是有錯還請大神不吝賜教