妙趣横生的算法第一章.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 数据结构基础 要想成为一名真正的程序员,数据结构是必备的基础知识。只有学过数据结构,才能真正有效规范地组织程序中的数据。而在实际编程中,有些问题必须通过特定的数据结构才能更方便地解决。因此数据结构是每一个搞计算机的人都应当必须掌握的知识。 要想全面而系统地学习数据结构的知识,这里的介绍显然是不充分的,建议寻找专门介绍数据结构的书籍学习。如果你只想掌握一般层次的知识,或是已经学过数据结构,只是为了深入学习本书后续的内容而进行回顾和复习,那么本章的介绍是足够的。 1.1 什么是数据结构 数据结构就是指计算机内部数据的组织形式和存储方法。数组就是一种简单而典型的线性数据结构类型。本章中将更加具体地介绍一些常用的数据结构,主要包括:线性结构、树、图。 线性结构是最常用,也是最简单的一种数据结构。所谓线性结构,就是指由n个数据元素构成的有限序列。直观地讲,它就是一张有限的一维数表。数组就是一种最为简单的线性结构表示。更加具体地说,线性结构主要包括:顺序表、链表、栈、队列等基本形式。其中顺序表和链表是从存储形式上区分的,而栈和队列是从逻辑功能上区分的。也就是说,顺序表和链表是线性数据结构的基础,队列和栈是基于顺序表和链表的,它们由顺序表或链表构成。 有时仅仅用线性结构存储管理数据是难以胜任的,一些数据之间存在着“一对多”的关系,这就构成了所谓的树形结构,简称树结构。例如人工智能领域常用的“博弈树”,数据挖掘和商业智能中使用的“决策树”,多媒体技术中的“哈夫曼树”等都是应用树结构存储管理数据的实例。 还有一种常用的数据结构叫做图状结构,简称图结构。图结构中数据元素之间存在着“多对多”的关系,因此图结构与树结构相比,其线性结构要复杂得多。在处理一些复杂的问题中,图结构往往能派上用场。例如:人工智能领域中的神经网络系统、贝叶斯网络等都是应用图结构存储管理数据的实例。 1.2 顺 序 表 在计算机内部存储一张线性表(线性结构的数表),最为方便简单的就是用一组连续地址的内存单元来存储整张线性表。这种存储结构称为顺序存储结构,这种存储结构下的线性表就叫做顺序表。如图1-1所示,就是顺序表的示意。 图1-1 顺序表的示意 从上图中可以看出,一张顺序表包括以下特征。 有一个唯一的表名来标识该顺序表。 内存单元连续存储,也就是说,一张顺序表要占据一块连续的内存空间。 数据顺序存放,元素之间有先后关系。 因为数组满足上述特征,所以一个数组本身就是一张顺序表。 下面介绍如何定义顺序表以及对顺序表的几种操作。 1.2.1 顺序表的定义 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。 有两种定义顺序表的方法:一是静态地定义一张顺序表;二是动态地生成一张顺序表。 静态地定义一张顺序表的方法与定义一个数组的方法类似。可以描述如下: #define MaxSize 100 ElemType Sqlist[MaxSize]; int len; 为了更完整、更精确地描述一张顺序表,可以把顺序表定义成上面的代码形式。其中ElemType是指定的顺序表的类型,这里只是一个抽象的描述,要根据实际情况决定ElemType的内容。ElemType可以是int、char等基本类型,也可以是其他构造类型(结构体类型等)。len为顺序表的长度,定义这个变量目的是更加方便对顺序表进行操作。 这里要注意,上述这种定义方法,包括今后的其他数据类型的定义,都只是一种更完整、更精确的描述。读者不应刻板地机械模仿。例如这样定义: int a[1000]; 是定义一个数组,但同时也是静态定义一个顺序表。不一定非要预定义MaxSize和定义变量len。因此读者学习时应灵活掌握。 动态地生成一张顺序表的方法可描述如下: #define MaxSize 100 typedef struct{ ElemType *elem; int length; int listsize; } Sqlist; void initSqlist(Sqlist *L){ /*初始化一个顺序表*/ L-elem=(int *)malloc(MaxSize*sizeof(ElemType)); if(!L-elem) exit(0); L-length=0; L-listsize= MaxSize; } 动态生成一张顺序表可分为以下两步。 (1)定义一个类型Sqlist,它是一个结构体,其成员包括:指向顺序表的首地址,顺序表中表的长度(表中元素个数),顺序表的存储空间容量(占据内存大小,以sizeof(ElemType)为单位,由MaxSize规定)。 (2)通过

文档评论(0)

yan666888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档