昨天去书城,发现C/C++/Java版的数据结构都有,却没有C#描述版的,因此想找人一起出书
昨天去书城,本来是想选几本系统分析师和SAP方面的书,后来一本数据结构(Java版)把我吸引了过去,于是我同样去找看有没有C#版的,可是翻遍整个计算机楼层的书,只见C/C++版和Java版的,因此我突然有了个想法,想用C#来描述数据接口,比如线性表,堆栈,二叉树,图等,于是买了那本Java描述的数据结构回来看,因为Java与C#非常类似,所以不难出一本C#版的数据结构来,虽然网络上已经有了C#版的数据结构,但我相信再添加点微薄之力很有必要,有兴趣的朋友,可以一起研究,不用刻意去做这件事,因为大家和我一样都比较忙,但我们可以享受这个过程。(msn:lihuaz@live.com)
------解决方案--------------------已经有人写了,已交稿,3月份出来
http://www.cnblogs.com/abatei/archive/2008/10/12/1309615.html
------解决方案--------------------我有一本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()
初始条件:线性表存在且有数据元素;
操作结果:从线性表中清除所有数据元素,线性表为空。
------解决方案--------------------数据结构与算法并没有语言的界限.
甚至很多算法, 是用pascal语言描述的, 但这个并不妨碍大家明白这个算法的逻辑.
正如你所说, java和C#非常像. Java的数据结构与算法已经能完全满足普通需要.
事实上, 如果一个人, 连语言与算法无关性都做不到, 那么他几乎不可能学好数据结构与算法.
我可以这样说, C++描述的通用算法, 如果他看不懂, 那么就算你写成C#, 他90%仍然看不懂.
能够学好数据结构与算法的人, 必然能够脱离某种语言的束缚.
会被语言束缚的, 必然学不好数据结构与算法.
当然, 我说的是一般应用程序开发领域, 特殊领域比如嵌入式等例外.
------解决方案--------------------这个内容已经很多了。
------解决方案--------------------C# 用的熟练的, 基本上已经用其他语言学过 数据结构和算法了,
并且领会了本质, 在 C# 上一样应用自如.
那种 通过 ** 语言描述的书籍, 怀疑是否真的有人通过它掌握了这些知识.
------解决方案--------------------