Пример #1
0
        /*
         * Merge() 升序合并
         * 有数据类型为整型的顺序表 La 和 Lb,其数据元素均按从小到大的升
         * 序排列,编写一个算法将它们合并成一个表 Lc,要求 Lc 中数据元素也按升序排
         * 列。
         * 算法思路:
         * 依次扫描 La 和 Lb 的数据元素,比较 La 和 Lb 当前数据元素的
         * 值,将较小值的数据元素赋给 Lc,如此直到一个顺序表被扫描完,然后将未完
         * 的那个顺序表中余下的数据元素赋给 Lc 即可。 Lc 的容量要能够容纳 La 和 Lb
         * 两个表相加的长度。
         */
        public SeqList <int> Merge(SeqList <int> La, SeqList <int> Lb)     //升序合并
        {
            SeqList <int> Lc = new SeqList <int>(La.Maxsize + Lb.Maxsize); //初始化Lc
            int           i  = 0;                                          //temp Ptr 3个
            int           j  = 0;

            #region 两个表中都有数据元素
            while ((i <= (La.GetLength() - 1)) && (j <= (Lb.GetLength() - 1)))
            {
                if (La[i] < Lb[j])
                {
                    Lc.Append(La[i++]);
                }
                else   //(La[i] > Lb[j])
                {
                    Lc.Append(Lb[j++]);
                }
            }
            #endregion
            #region a表中还有数据元素
            while (i <= (La.GetLength() - 1))
            {
                Lc.Append(La[i++]);
            }
            #endregion
            #region b表中还有数据元素
            while (j <= (Lb.GetLength() - 1))
            {
                Lc.Append(Lb[j++]);
            }
            #endregion
            return(Lc);
            //算法的时间复杂度是 O(m+n), m 是 La 的表长, n 是 Lb 的表长。
        }//升序合并
Пример #2
0
        }//升序合并

        /*
         * Purge() 净化
         * [例 2-3]
         * 已知一个存储整数的顺序表 La,试构造顺序表 Lb,要求顺序表 Lb 中
         * 只包含顺序表 La 中所有值不相同的数据元素。
         * 算法思路:
         * 先把顺序表 La 的第 1 个元素赋给顺序表 Lb,
         * 然后从顺序表 La的第 2 个元素起,
         * 每一个元素与顺序表 Lb 中的每一个元素进行比较,
         * 如果不相同,则把该元素附加到顺序表 Lb 的末尾。
         * 从表中删除相同数据元素的算法的 C#实现如下:
         */
        public SeqList <int> Purge(SeqList <int> La)          //净化
        {
            SeqList <int> Lb = new SeqList <int>(La.Maxsize); //声明Lb

            Lb.Append(La[0]);                                 //将a表中的第1个数据元素赋给b表
            //依次处理a表中的数据元素
            for (int i = 1; i <= La.GetLength() - 1; ++i)
            {
                int j = 0;
                #region 查看b表中有无与a表中相同的数据元素
                for (j = 0; j <= Lb.GetLength() - 1; ++j)
                {
                    #region  相同的数据元素
                    if (La[i].CompareTo(Lb[j]) == 0)
                    {
                        //CompareTo()
                        //Equal()
                        continue;//跳过
                    }
                    #endregion
                    #region 没有相同的数据元素,将a表中的数据元素附加到b表的末尾。
                    if (j > Lb.GetLength() - 1) //mean next
                    {                           //没有相同的数据元素,将a表中的数据元素附加到b表的末尾。
                        Lb.Append(La[i]);
                    }
                    #endregion
                }
                #endregion
            }
            return(Lb);
            //算法的时间复杂度是 O(m + n), m 是 La 的表长, n 是 Lb 的表长。
        } //净化
Пример #3
0
        }//倒置

        //存储整数的顺序表的倒置的算法实现如下:
        public void ReversSeqList(SeqList <int> L)
        {
            //重载方法
            //倒置,思路,1条数组对半切成2条数组,循环下标指针交换
            //0.5向上取整
            int tmp = 0;//default(T) == 0;
            int len = L.GetLength();

            for (int i = 0; i <= len / 2; ++i)
            {
                tmp        = L[i];
                L[i]       = L[len - i];
                L[len - i] = tmp;
            }
        }