예제 #1
0
        /**
         * 已知一个存储整数的顺序表 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);
        }
예제 #2
0
        //顺序表的倒置的算法
        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;
            }
        }
예제 #3
0
        //二路归并(从小到大升序排列)
        //算法的时间复杂度是 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);
        }