- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)通过
您可能关注的文档
最近下载
- (高清版)-B-T 34590.9-2022 道路车辆 功能安全 第9部分:以汽车安全完整性等级为导向和以安全为导向的分析.pdf VIP
- 2025至2030年中国智慧港口行业市场调查分析及投资发展潜力报告.docx
- 预制菜生产参考卫生规范.doc VIP
- 三年级劳动技术浙教版下册:任务二 煮鸡蛋 蒸馒头-教学课件.pptx
- 预制菜生产加工卫生规范.pdf VIP
- 2025下半年中储粮油脂有限公司招聘笔试历年参考题库附带答案详解(10卷合集).docx
- 《短歌行》《归园田居(其一)》课内知识训练(含答案).docx VIP
- 选择性背根神经节阻滞术治疗急性带状疱疹神经痛的疗效观察.doc VIP
- (建筑工程管理)砌砖及基础工程技术交底.pdf VIP
- (高清版)-B-T 34590.10-2022 道路车辆 功能安全 第10部分:指南.pdf VIP
文档评论(0)