线性表-归并算法
/*例如:有兩個(gè)線性表LA=(1,5,7,15)LB=(3,6,8,9,13,15,17)
則: LC=(1,3,6,8,9,13,15,15,17)
上述問題要求可知,LC中的數(shù)據(jù)元素或是LA中的數(shù)據(jù)元素,或是LB中的數(shù)據(jù)元素,則首先設(shè)LC為空表,然后將LA或LBs中的元素逐個(gè)插入到LC當(dāng)中。
為使LC中元素按值非遞減排列,可設(shè)兩個(gè)指針i,j分別向LA和LB中的某個(gè)元素,若設(shè)i當(dāng)所指的元素為a,j所指的元素為b則當(dāng)前應(yīng)插LC元素c為|-> b a>bc=|-> a a=b|-> a a<b顯然,設(shè)指針i的j的初使值為1,在所指元素插入LC之后,指針在表LA或LB中將順序后移。
*/
template<class T>
class merge<T>::
void MergetList(T La,T Lb, T Lc)
{
/*已知線性表La和Lb中的數(shù)據(jù)元素按值非遞減排列*/
/*歸并La和Lb得到新的線性表Lc,Lc的數(shù)據(jù)元素也按值非遞減排列*/InitList(Lc);i=j=1;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 if (ai==bj){ListInsert(Lc,++k,ai);++i;++j;}else{ListInsert(Lc,++k,bj);++i;++j;}}while(i<=La_len){/*如果La沒有取完,則將La中的所剩元素插入到表Lc中*/GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){/*如果La沒有取完,則將La中的所剩元素插入到表Lc中*/GetElem(La,j++,bj);ListInsert(Lc,++k,bj);}
}/***********************************************************************-*/
/* MergeList */
/************************************************************************/
轉(zhuǎn)載于:https://www.cnblogs.com/zhangdongsheng/articles/1862055.html
總結(jié)
- 上一篇: DHL:jQuery框架学习使用总结,插
- 下一篇: 什么是 Silverlight?