作者:empty 页数:262 出版社:empty |
致谢编者在写这本书时适到了两个问题。第一个问题是关于数据结构教材。应该说关于数在接下来的写作过程中, 编者遇到了另外一个问题, 那就是C#语言和.NET Framework木书分为8章,第1章介绍了数据结构和算法的基木概念及木书用到的数学和C#的知将数据结构与C#语言和, NET框架结介是木书的一人特点。.NET平台是微软推出的一本书配套光盘中包含以下内容:1、code目录是本书所有的代码及一个《学生信息管理系统》的代码, code目录包含案例子目录中是《学生信息管理系统》的代码。《学生信息管理系统》是学生上学期学chapter 1~chapter 8等8个目录分别对应木书的相应章节, 其中每个甘录中的source子目chapter 1-chapter 8等目录中还有一个project子目录, 里面有一个或多个项目, 是使用各2、ppt月录下是本书的电子课件, 可作为教师教学参考、学生自学之用,3、pdf目录下是本书的电子版本, 可作为电子图书供读者在电脑上学习使用,4、pictures目录下本书中比较大的图, 是用MicrosoftOffice Visio 2003软件画的, 目5、有一个stu info.txt文件, 是30位虚拟学生的信息, 可根据实际需要进行增册, 但据结构的教材已经很多了。白从美国唐.欧.克努特教授用汇编语言写的《计算机程序设计技巧》第一卷《基木算法》问世以来, 已经出现了用PASCAL、C、C++、JAVA等语言写的数据结构书,所以,在编者写本书之前,曾经感到很为难。门前,C#语言作为微软在新一代开发平台.NET推出的、完全面向对象的语言, 凭着其简洁、高效、模板、标准化的特性,使得C#语言像程序设计语言中的一件艺术品,也吸引着越来越多的开发人员。这也使得我院的可视化专业进行专业改革时,决定以C#语言作为该专业的主要开发语言。所以说,用C#语言来讲授《数据结构》课程是我院专业改革的结果。而用C#语言写的数据结构教材目前国内基本上是空白,鉴于此,编者决定写本书,的发展。当作者写这本书时, 是以C#语言和NET Framework的2.0版本来写的。但是, 到目前为止, C#语言和NET Framework已经出现3.0版本了.这使得编者感到了微软技术的发展之快,发出了“学习微软的东西在某种程度上是一种痛苦”之叹!也使编者曾产生了放弁写该书的念头。但作为教师的责任和对新东西的执著使得编者一直坚持,直到该书完。也附带说一句:如果读者在阅读过程中,发现有些技术不是最新的技术也不要惊奇,本书是以C#语言和, NET Framework 2.0版本来写的,识:第2章至第6章分别讨论了线性表、栈和队列、申和数组、树型结构和图结构等常用的数据结构及其应用, 以及在.NET框架中相应的数据结构:第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。个新的开发半台, 开的是让“不同的语言共享同一平台”, NET很可能成为下一代Windows操作系统的一部分, 面C#语言作为新一代完全面向对象的语言, 是.NET的母言, 本书所有的数据结构和算法都是用C#语言进行描述, 并在相应章节的末尾介绍了在NET框架中常用的数据结构和算法.用C#在NET平台开发的技术人员可以从本书巾获得许多有益的知识和技术,案例和chapter l-chapter 8等9个子日录.习《C#初级编程》课程所做的一个小系统,是学生在没有学过《数据结构》课程时算法,目的在于让学生比较采用数据结构和算法与不采用数据结构与算法的不同,所以,把这个小的系统作为《数据结构(C#)》课程的学习素材。考虑到有些学校在选用本教材时学生没有做过这个系统,所以,把代码全部给了出来。录是本书中的有关源代码,涉及各个数据结构的接、结点类、数据结构类的C#代码及常用算法都放在相应章节目录下的source子目录中。种数据结构和常用的排序和查找算法来解决《学生信息管理系统》的项目,是案例内容在数前育据结构中的推广和延伸,所有的代码都没有完成,可作为教师教学、学生实验、课程设计等的素材使用。其中, chapter l中的project子目录是各个例题中问题应用的项目, chapter 4由丁string和array是经常使用的数据结构和数据类型, 所以, 没有project子目录而只有source子目录.chapter 6出于图的内容高职层次的学生很少涉及, 所以也没有project子目录而只有source子目录。的是为了让教师更好地各课与上课。主要是第5章以后章节的部分图,必须修改相应的程序代码,不足之处,思请广大读者批评指正。如果您对木书或光盘有什么意见、问题或想法,欢迎您通过下面的邮件通知编者,编者将不胜感激:数据结构(C#语音版)数据结构(C#语言版)使用本书及光盘的工具Mie rosoft VisualStudio 2005(如果您想运行本书中的程序, 那么您需要在计算机中安装它):
MicrosoftOffice PowerPoint 2003(如果您想使用ppt日录中的内容, 那么您需要在计算机中安装它);MicrosoftOffice Visio 2003(如果您想使用pictures目录中的内容, 那么您需要在没有许多人的帮助,编者是不可能完成本书的。尤其要感谢下面这些人。计算机中安装它):Adobe Acrobat 7.0 Professional(如果您想使用pdf目录中的内容, 那么您需要在计算机中安装它);张应辉院长和胡锦德院长一直关注和支持可视化专业的专业改革,特别是胡院长,亲白指导了专业改革,并多次询问该书的进度并对其中的问题给予指示,如果没有二位领导,该书是不可能产生和完成的。出版社的周凌波和郭朝晖老师为本书的修订和出版做了大量的工作。与他们的合作非常愉快,他们尽力使本书的东西通顺流畅。没有他们的工作,本书不可能出版。最后,编者要感谢自己的家人.为了写这本书,编者投入了大量的时间和精力,牺牲了许多的周末和节假。没有晋璐(编者的妻子)和段楚榆(编者的女儿)的支持,根本不可能有这本书的问世,多少次,编者都想花些时间陪伴家人,但都因为本书而放弃了。现在,本书总算告一段落,编者可以有更多时间幸福地听到女儿的笑声了。
第1章绪论数据结构(CW语言版)数据结构(C#语版)数据是外部世界信息的计算机化,是计算机加工处理的对象。运用计算机处理数据时,必须解决四个方面的问题:一是如何在计算机中方便、高效地表示和组织数据:二是如何在计算机存储器(内存和外存)中存储数据:三是如何对存储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何对同一问题的不同操作方法进行评价:四是必须理解每种数据结构的性能特征,以便选择一个适合于某个特定问题的数据结构。这些问题就是数据结构这门课程所要研究的主要问题。本章首先说明学习数据结构的必要性和本书的目的,然后解释数据结构及其有关概念,接着讨论算法的相关知识,最后简单介绍本书所要用到的相关数学知识和C#知识。1.1数据结构1.1.1学习数据结构的必要性我们知道,虽然每个人都懂得英语的语法与基本类型,但是对于同样的题目,每个人写出的作文,水平却高低不一,程序设计也和写英语作文一样,虽然程序员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。当然,程序设计水平的提高仅仅靠看几本程序设计书是不行的。只有多思索、多练习,才能提高自己的程序设计水平;否则,书看得再多,提高也不大。记得刚学程序设计时,常听人说程序设计水平要想提高,最重要的是多看别人写的程序,多去思考问题。从别人写的程序中,我们可以发现效率更高的解决方法:从思考问题的过程中,我们可以了解解决问题的方法常常不只一个,运用先前解决问题的经验,来解决更复杂更深入的问题,是提高程序设计水平的最有效途径。数据结构正是前人在思索问题的过程中所想出的解决方法。一般而言,在学习程序设计一段时间后,学习“数据结构”便能让你的程序设计水平上一个台阶.如果只学会了程序设计的语法和语义,那么你只能解决程序设计三分之一的问题,而且运用的方法并不是最有效的,但如果学会了数据结构的概念,就能在程序设计上,运用最有效的方法来解决绝大多数的问题。数据结构形成了程序员基本数据结构工具箱(toolkit) 。对于许多常见的问题, 工具箱里的数据结构是理想的选择。就像.NET Framework中Windows应用程序开发中的工具箱,程序员可以直接拿来或经过少许的修改就可以使用,非常方便,第二个是讲授常用的算法,这和数据结构一样,是人们在长期实践过程中的总结,程序员可以直接拿来或经过少许的修改就可以使用。可以通过算法训练来提高程序设计水平。第三个目的是通过程序设计的技能训练促进程序员综合能力的提高。1.1.2基本概念和术语《数据结构》这门课程的目的有三个。第一个是讲授常用的数据结构,这些在本小节中,将对一些常用的概念和术语进行介绍,这些概念和术语在以后的章节中会多次出现。1.数据(Data)数据是外部世界信息的载体,它能够被计算机识别、存储和加工处理,是计算机程序加工的原料。计算机程序处理各种各样的数据,可以是数值数据,如整数、实数或复数:也可以是非数值数据,如字符、文字、图形、图像、声音等。2、数据元素(Data Elemen) 和数据项(Data Item)
数据结构2数据元素是数据的基本单位,在计算机程序中通常被作为一个整体进行考虑和处理。数据元素有时也被称为元素、结点、顶点、记录等。一个数据元素可由若干个数据项(Data Item) 组成。数据项是不可分割的、含有独立意义的最小数据单位, 数据项有时也称为字段(Field) 或域(Domain) 。例如, 在数据库信息处理系统中,数据表中的一条记录就是一个数据元素。这条记录中的学生学号、姓名、性别、籍贯、出生年月、成绩等字段就是数据项。数据项分为两种,一种叫做初等项,如学生的性别、籍贯等,在处理时不能再进行分割:另一种叫做组合项,如学生的成绩,它可以再分为数学、物理、化学等更小的项。3、数据对象(DataObject)数据对象是性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是{0,±1,±2.±3,),字符数据对象是{a.b.c,…1.4、数据类型(DataType)数据类型是高级程序设计语言中的概念,是数据的取值范围和对数据进行操作的总和。数据类型规定了程序中对象的特性。程序中的每个变量、常量或表达式的结果都应该属于某种确定的数据类型.例如, C#语言中的字符串类型(String,经常写为strng) 。一个String表示一个恒定不变的字符序列集合, 所有的字符序列集合构成String的取值范围, 我们可以对String进行求长度、复制、连接两个字符串等操作。数据类型可分为两类:一类是非结构的原子类型,如C#语言中的基本类型(整型、实型、字符型等);另一类是结构类型,它的成分可以由多个结构类型组成,并可以分解。结构类型的成分可以是非结构的,也可以是结构的。例如,C#语言中数组的成分可以是整型等基本类型,也可以是数组等结构类型。5、数据结构(DataStructure)数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素之间都不是孤立的,而是存在着一定的关系,这种关系称为结构(Structure) 。根据数据元素之间关系的不同特性, 通常有4类基本数据结构:(1) 集合(Set) :如图1.1(a) 所示, 该结构中的数据元素除了存在“同属于一个集合”的关系外,不存在任何其它关系。(2) 线性结构(Linear Structure) ; 如图1.1(b) 所示, 该结构中的数据元素存在着一对一的关系。(3) 树形结构(Tree Structure) :如图1.1(c) 所示, 该结构中的数据元素存在着一对多的关系。(4) 图状结构(Graphic Structure) :如图1.1(d) 所示, 该结构中的数据元素存在着多对多的关系。由于集合中的元素的关系极为松散,可用其它数据结构来表示,所以本书不做专门介绍。关于集合的概念在1.3.1小节中有介绍。数据结构(DataStructure) 简记为DS, 是一个二元组,一行是一个记录(在数据库信息处理系统中,表中的一个数据元素称为一个记录)。一条记录由学号、姓名、行政班级、性别和出生年月等数据项组成。表中图中,爷爷、儿子、女儿、孙子、孙女或外孙女是一个结点(在树形结构中,数据元素称为结点),他们之间是:对多的关系。其中,爷爷有两个儿子和个女儿,这是一对三的关系;一个儿子有两个儿子(爷爷的孙子),这是一对二的关系:另一个儿子有一个儿子(爷爷的孙子)和一个女儿(爷爷的孙女),这是一对二的关系;女儿有三个女儿(爷爷的外孙女),这是一对三的关系。树形结构具有严格的层次关系,爷爷在树形结构的最上层,中间层是儿子和女儿,最下层是孙子、孙女和外孙女。不能把这种关系倒过来,因为绝对不会先有儿子或女儿再有爷爷,也不会先有孙子或孙女再有儿子、先有外孙女再有女儿。图中,每个城市是一个顶点(在图状结构中,数据元素称为顶点),它们之间是多对多的关系。成都与都江堰、雅安直接通公路,都江堰与成都、青城山直接通公路,青城山与都江堰、成都及雅安直接通公路,雅安与成都、青城山直接通公路。这些公路构成了一个公路交通网, 所以, 又把图状结构称为网状结构(Network
第1章
1.1
绪论.
数据结构.
1.1.1
1.1.2
1.2算法.
2.1.1线性表的定义.
2.1.2线性表的基本操作.
2.2顺序表.
2.2.1顺序表的定义.
2.3单链表.
3.1栈.
3.1.1栈的定义及基本运算.
3.1.2栈的存储和运算实现.
4.1串.
4.2数组.
本章小结.
习题四.
5.1树.
6.1图的基本概念.
学习数据结构的必要性.
基本概念和术语.
1.2.1算法的特性.
1.2.2算法的评价标准.
1.2.3算法的时间复杂度.
1.3数学预备知识.
1.3.1集合.
1.3.2常用的数学术语.
1.3.3对数.
1.3.4递归
1.4C#预备知识.
1.4.1接.
1.4.2泛型编程.
本章小结.
习题-.
第2章线性表.
2.1线性表的逻辑结构.
2.2.2顺序表的基本操作实现.
2.2.3顺序表应用举例.
2.3.1单链表的定义.
2.3.2单链表的基本操作实现.
2.3.3单链表应用举例.
2.4其他链表.
2.4.1双向链表.
2.5C#中的线性表.
本章小结.
习题二.
第3章栈和队列.
2.4.2循环链表.
3.1.3栈的应用举例.
3.1.4C#中的栈.
3.2队列.
3.2.1队列的定义及基本运算
3.2.2队列的存储和运算实现.
3.2.3队列的应用举例.
3.2.4C#中的队列.
本章小结.
习题三.
第4章串和数组.
第5章树和二叉树.
数据结构(CW语言版)
数据结构(C#语产版)
4.1.1串的基本概念.
4.1.2串的存储及类定义.
4.1.3串的基本操作的实现.
4.1.4C#中的串.
4.2.1数组的逻辑结构.
4.2.2数组的内存映象.
4.2.3C#中的数组.
5.1.1树的定义.
5.1.2树的相关术语.
5.1.3树的逻辑表示.
5.1.4树的基本操作.
5.2二叉树.
5.2.1二叉树的定义
5.2.2二叉树的性质.
5.3树与森林.
5.4哈夫曼树.
本章小结.
习题五.
第6章图.
5.2.3二叉树的存储结构.
5.2.4二叉链表存储结构的类实现.
5.2.5二叉树的遍历.
5.3.2树、森林与二叉树的转换.
5.3.3树和森林的遍历.
5.4.1哈夫曼树的基