/** * 已知一个存储整数的顺序表 La,试构造顺序表 Lb,要求顺序表 Lb 中 * 只包含顺序表 La 中所有值不相同的数据元素。 */ //数据去重的操作 //算法的时间复杂度是 O(m+n),m 是 La 的表长,n 是 Lb 的表长 public SeqList <int> Purge(SeqList <int> La) { SeqList <int> Lb = new SeqList <int>(La.Maxsize); //将a表中的第1个元素赋值给b表 Lb.Append(La[0]); //依次出来a表中的数据元素 for (int i = 1; i < La.GetLength(); i++) { int j = 0; //查看b表中有无与a表中相同的数据元素 for (j = 0; j < Lb.GetLength(); j++) { //有相同的数据元素 if (La[i].CompareTo(Lb[j]) == 0) { break; } } //没有相同的数据元素,将a表中的数据元素附加到b表的末尾 if (j > Lb.GetLength() - 1) { Lb.Append(La[i]); } } return(Lb); }
//顺序表的倒置的算法 public void ReversSeqList(SeqList <T> L) { T tmp = default(T); int len = L.GetLength(); for (int i = 0; i <= len / 2; ++i) { tmp = L[i]; L[i] = L[len - i]; L[len - i] = tmp; } }
//二路归并(从小到大升序排列) //算法的时间复杂度是 O(m+n),m 是 La 的表长,n 是 Lb 的表长。 public SeqList <int> Merge(SeqList <int> La, SeqList <int> Lb) { SeqList <int> Lc = new SeqList <int>(La.Maxsize + Lb.Maxsize); int i = 0; int j = 0; int k = 0; //两个表中都有数据元素 while ((i <= La.GetLength() - 1) && (j <= Lb.GetLength() - 1)) { if (La[i] < Lb[j]) { Lc.Append(La[i++]); } else { Lc.Append(Lb[j++]); } } //a表中还有数据元素 while (i <= (La.GetLength() - 1)) { Lc.Append(La[i++]); } //b表中还有数据元素 while (j <= (Lb.GetLength() - 1)) { Lc.Append(Lb[j++]); } return(Lc); }