转载——用C#学数据结构(2)

 线性表

线性表是最简单、最基本、最常用的数据结构。

List类和ArrayList

List<T> 类表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。List 类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList 泛型接口。

List类的属性和方法

成员

说明

Capacity

获取或设置该内部数据结构在不调整大小的情况下能够保存的元素总数

Count

获取List中实际包含的元素数

Item

获取或设置指定索引处的元素

Add

将对象添加到List的结尾处

AddRange

将指定集合的元素添加到List的末尾

BinarySearch

使用对分检索算法在已排序的List或它的一部分中查找特定元素

Clear

从List中移除所有元素

Contains

确定某元素是否在List中

CopyTo

将List或它的一部分复制到一个数组中

IndexOf

返回List或它的一部分中某个值的第一个匹配项的从零开始的索引

Insert

将元素插入List的指定索引处

InsertRange

将集合中的某个元素插入List的指定索引处

LastIndexOf

返回List或它的一部分中某个值的最后一个匹配项的从零开始的索引

Remove

从List中移除特定对象的第一个匹配项

RemoveAll

移除与指定的谓词所定义的条件相匹配的所有元素

RemoveAt

移除List的指定索引处的元素

RemoveRange

从List中移除一定范围的元素

Reverse

将List或它的一部分中元素的顺序反转

Sort

对List或它的一部分中的元素进行排序

ToArray

将List的元素复制到新数组中

根据MSDN,在决定使用List还是使用ArrayList类(两者具有类似的功能)时,记住List类在大多数情况下执行得更好并且是类型安全的。如果对List类的类型T使用引用类型,则两个类的行为是完全相同的。但是,如果对类型T使用值类型,则需要考虑实现和装箱问题。

如果对类型T使用值类型,则编译器将特别针对该值类型生成List类的实现。这意味着不必对List对象的列表元素进行装箱就可以使用该元素,并且在创建大约500个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。使用List类的特定类型的实现,而不是使用ArrayList类或自己编写强类型包装集合,这样是很有好处的。

应用实例:有数据类型为整型的顺序表LaLb,其数据元素均按从小到大的升序排列,编写一个算法将它们合并成一个表Lc,要求Lc中数据元素也按升序排列。

using System;

using System.Collections.Generic;

 namespace DataStruct

{

    class Program

    {

        static void Main(string[] args)

        {

            try

            {

                List<int> l1 = new List<int>(5);

                List<int> l2 = new List<int>(5);

                for (int i = 1; i <= 5; i++)

                {

                    l1.Add(2 * i - 1);

                    l2.Add(2 * i);

                }

                ShowListData(l1);

                ShowListData(l2);

                ShowListData(Merge(l1, l2));

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

            Console.Read();

        }

        public static List<int> Merge(List<int> La, List<int> Lb)

        {

            List<int> Lc = new List<int>(La.Count + Lb.Count);

            int i,j,k;

            i = j = k = 0;

            while ((i < La.Count) && (j < Lb.Count))

            {

                if (La[i] < Lb[j])

                    Lc.Add(La[i++]);

                else

                    Lc.Add(Lb[j++]);

            }

            while (i <La.Count)

            {

                Lc.Add(La[i++]);

            }

            //b表中还有数据元素

            while (j <Lb.Count)

            {

                Lc.Add(Lb[j++]);

            }

            return Lc;

        }

        public static void ShowListData(List<int> l)

        {

            foreach (int i in l)

                Console.Write(i + " ");

            Console.WriteLine();

        }

    }

}

运行结果如下:

 用C学数据结构(2) - Castor - 趁年轻,多折腾~~

 

 

posted on 2013-01-17 15:37  others  阅读(165)  评论(0)    收藏  举报

导航