昨天去书城,本来是想选几本系统分析师和SAP方面的书,后来一本数据结构(Java版)把我吸引了过去,于是我同样去找看有没有C#版的,可是翻遍整个计算机楼层的书,只见C/C++版和Java版的,因此我突然有了个想法,想用C#来描述数据接口,比如线性表,堆栈,二叉树,图等,于是买了那本Java描述的数据结构回来看,因为Java与C#非常类似,所以不难出一本C#版的数据结构来,虽然网络上已经有了C#版的数据结构,但我相信再添加点微薄之力很有必要,有兴趣的朋友,可以一起研究,不用刻意去做这件事,因为大家和我一样都比较忙,但我们可以享受这个过程。(msn:[email protected])

解决方案 »

  1.   

    已经有人写了,已交稿,3月份出来
    http://www.cnblogs.com/abatei/archive/2008/10/12/1309615.html
      

  2.   

    我有一本pdf的  截取一部分发来
    第2章  线性表 
    线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象
    (Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这
    种一对一的关系指的是数据元素之间的位置关系,即:(1)除第一个位置的数据
    元素外,其它数据元素位置的前面都只有一个数据元素;(2)除最后一个位置的
    数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是
    一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。
    本书在介绍各种数据结构时,先介绍数据结构的逻辑结构,包括定义、基本
    操作。然后介绍数据结构的存储结构,先介绍顺序存储结构,再介绍链式存储结
    构。 
    2.1 线性表的逻辑结构 
    2.1.1 线性表的定义 
    线性表(List)是由 n(n≥0)个相同类型的数据元素构成的有限序列。对于这
    个定义应该注意两个概念:一是“有限” ,指的是线性表中的数据元素的个数是
    有限的,线性表中的每一个数据元素都有自己的位置(Position)。本书不讨论数
    据元素个数无限的线性表。二是“相同类型” ,指的是线性表中的数据元素都属
    于同一种类型。虽然有的线性表具有不同类型的数据元素,但本书中所讨论的线
    性表中的数据元素都属于同一类型。 
    线性表通常记为:L=(a1,a2,…,ai-1,ai, ai+1,…,an),L是英文单词list的第 1
    个字母。L中包含n个数据元素,下标表示数据元素在线性表中的位置。a1是线性
    表中第一个位置的数据元素,我们称作第一个元素。an是线性表中最后一个位置
    的数据元素,我们称作最后一个元素。n为线性表的表长,n=0 时的线性表被称
    为空表(Empty List)。 
    线性表中的数据元素之间存在着前后次序的位置关系,将ai-1称为ai的直接前
    驱,将ai称为ai+1的直接后继。除a1外,其余元素只有一个直接前驱,因为a1是第
    一个元素,所以它没有前驱。除an外,其余元素只有一个直接后继,因为an是最
    后一个元素,所以它没有后继。 
    线性表的形式化定义为:线性表(List)简记为L,是一个二元组, 
    L = (D, R) 
    其中:D是数据元素的有限集合。 
    R是数据元素之间关系的有限集合。 
    在实际生活中线性表的例子很多。例如,1 到 100 的偶数就是一个线性表:
           (2,4,6,…,100) 
    表中数据元素的类型是自然数。某个办公室的职员姓名(假设每个职员的姓
    名都不一样)也可以用一个线性表来表示: 
    (“zhangsan”,”lisi”,”wangwu”,”zhaoliu”,”sunqi”,”huangba”) 
    表中数据元素的类型为字符串。 
    在一个复杂的线性表中,一个数据元素是一个记录,由若干个数据项组成,
    含有大量记录的线性表又称文件(File)。例如,例子 1.1 中的学生信息表就是一
    个线性表,表中的每一行是一个记录。一个记录由学号、姓名、行政班级、性别
    和出生年月等数据项组成。 
    2.1.2 线性表的基本操作 
    数据结构(C#语言版) 由于现在只考虑线性表的基本操作,所以以 C#接口的形式表示线性表,接
    口中的方法成员表示基本操作。并且,为了使线性表对任何数据类型都适用,数
    据元素的类型使用泛型的类型参数。在实际创建线性表时,元素的实际类型可以
    用应用程序中任何方便的数据类型来代替,比如用简单的整型或者用户自定义的
    更复杂的类型来代替。 
    线性表的接口如下所示。 
    public interface IListDS<T> { 
    int GetLength();             //求长度 
             void Clear();                //清空操作 
    bool IsEmpty();              //判断线性表是否为空 
             void Append(T item);         //附加操作 
             void Insert(T item, int i);  //插入操作 
             T Delete(int i);             //删除操作 
             T GetElem(int i);            //取表元 
             int Locate(T value);         //按值查找 

    为了和.NET 框架中的接口 IList 相区分,在 IList 后面加了“DS”,“DS”
    表示数据结构。下面对线性表的基本操作进行说明。 
    1、求长度:GetLength() 
       初始条件:线性表存在; 
    操作结果:返回线性表中所有数据元素的个数。 
    2、清空操作:Clear() 
       初始条件:线性表存在且有数据元素; 
    操作结果:从线性表中清除所有数据元素,线性表为空。 
      

  3.   

    数据结构与算法并没有语言的界限.
    甚至很多算法, 是用pascal语言描述的, 但这个并不妨碍大家明白这个算法的逻辑.正如你所说, java和C#非常像. Java的数据结构与算法已经能完全满足普通需要.事实上, 如果一个人, 连语言与算法无关性都做不到, 那么他几乎不可能学好数据结构与算法.我可以这样说, C++描述的通用算法, 如果他看不懂, 那么就算你写成C#, 他90%仍然看不懂.
    能够学好数据结构与算法的人, 必然能够脱离某种语言的束缚.会被语言束缚的, 必然学不好数据结构与算法.
    当然, 我说的是一般应用程序开发领域, 特殊领域比如嵌入式等例外.
      

  4.   

    楼上这位朋友说得好,数据结构和算法不仅与语言无关,还与平台无关,但是用C#去实现这些算法,让只懂C#的读者更好理解算法与数据结构,当然C/++操作底层,用它来描述和实现,是最能帮助理解数据结构,既然Java描述了,为什么不写本C#描述的呢?我只是怀着这简单的想法,找同行有此爱好的人一起试试,希望大家也不要误解,我用C#描述,如果我不懂C/C++,还有Java,我就不会领悟出来用C#来描述了。shrinerain你是具体做什么的?有点好奇
      

  5.   


    好像咱们都是Panda系的,你有功夫。
      

  6.   


    我是做Eclipse和FireFox的插件开发.