1. 程式人生 > >c語言版資料結構之線性表歸併大概

c語言版資料結構之線性表歸併大概

線性表:n個具有相同特性的資料元素的有限序列。較為靈活,可根據需要増長或縮短。

兩線性表歸併演算法(此時已知其元素按值非遞減排列)

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
在程式中,定義函式的形參取&Lc,是因為呼叫函式時,是將實參的函式值拷貝後在傳給實參,如若不取地址無法改變所要得到的線性表中的值。同理,此函式中應用相同原理呼叫的函式的原型分別是InitList(&L)、GetElem(L, i,&e)、ListInsert(&L,i,e)

總體思想:對已經排好序的兩連結串列,依次比較其大小,將小的值存入所要得到的線性表,當其中一個線性表元素判別完後,將另一線性表的元素直接接在所要得到的線性表後。

此篇文章僅代表作為本小白的觀點,若是有錯還請大神不吝賜教大笑