注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

用C#学数据结构(2)  

2011-07-28 19:30:42|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
声明:本人非计算机专业人士,没有过多的时间、经历和能力深入研究数据结构的实现,所以本系列文章不处理数据结构的实现,主要是练习各种数据结构的使用。欢迎大家交流讨论。

 线性表

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

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 - 趁年轻,多折腾~~
 

  评论这张
 
阅读(1133)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016