- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 表
第二章 表2.1 ADT表 线性结构特点:在数据元素的非空有限集中 存在唯一的一个被称作“第一个”的数据元素 存在唯一的一个被称作“最后一个”的数据元素 除第一个外,集合中的每个数据元素均只有一个前驱 除最后一个外,集合中的每个数据元素均只有一个后继 定义:一个线性表是n个数据元素的有限序列 2.2 用数组实现表 2.2.1顺序表的结构特点 2.2.3 顺序表LIST的基本运算实现 1、初始化函数 分配大小为size的空间给表数组table,并返回初始化为空的表。 List ListInit (int size) { List L; L=(List)malloc(sizeof(List)); L-table=(ListItem)malloc (size*sizeof(ListItem)); L-maxsize=size; L-n=0; return L; } 2、判断表是否为空及求表长函数 (1)判断线性表L是否为空 int ListEmpty(List L) { if (L-n==0) return TRUE; else return FALSE; } (2)求表长 int GetLength(List L) { return L-n; } 3、元素x定位函数 返回元素x在表中的位置,当元素x不在表中时返回0。 4、获取线性表L中的某个数据元素内容的函数 ListItem ListRetrieve(int k, List L) { if (k1 || kL-n) return ERROR; /*判断k值是否合理,若不合理,返回ERROR*/ return L-table[k-1]; } 时间复杂性O(1) 5、表元素插入运算void ListInsert (k, x, L) 定义:线性表的插入是指在第k(0?k ? n)个元素之后插入一个新的数据元素x,使长度为n的线性表 算法时间复杂度T(n) 设Pk是在第k个元素之后插入一个元素的概率,则在长度为n的线性表中插入一个元素时,所需移动的元素次数的平均次数为: 6、表元素删除运算 定义:线性表的删除是指将第k(1?i ? n)个元素删除,使长度为n的线性表 算法评价 设Qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为: 7、输出顺序表中所有元素的运算 void PrintList(List L) { int i; for(i=0;iL-n;i++) ItemShow(L-table[i]); /*此函数用以输出元素*/ } 时间复杂性:O(n) 2.2.4顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 无须为表示表中元素之间的顺序关系增加额外的存储空间 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素(除操作在表尾的位置进行外) 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充 2.3 用指针实现表 2.3.1 用指针实现表的特点: 用一组任意的存储单元存储线性表的数据元素 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素 每个数据元素ak,除存储本身信息外,还需存储其直接后继的信息 结点 数据域:元素本身信息 指针域:指示直接后继的存储位置 实现 2.3.3 单链表的基本运算 1、创建一个空表 List ListInit() { List L=malloc(sizeof*L); L-first=NULL; return L; } 2、判断当前表L是否为空表 Int ListEmpty(List L) { return L-first==NULL; } 3、求表长函数 Int ListLength(List L) { int len=0; link p; p=L-first; while(p) /*通过对表L进行线性扫描计算*/ { len++; p=p-next; } return len; } 时间复杂性为:O(n) 4、获取链表L中的某个数据元素的内容 ListItem ListRetrieve(int k,List L) { int i; link p; if(k1) Error(“out of bounds”); p=L-first
您可能关注的文档
最近下载
- 创业公司管理系统股权分配规划.pdf VIP
- 金融工程研究报告:量化交易,算法原理、类型与发展史-20230911-浙商证券-17页.docx VIP
- 神经外科术后患者的早期康复锻炼新进展.pptx
- G13—100SQF钢筋混凝土化粪池.docx VIP
- 金融工程深度:多因子量化投资框架梳理-20240222-浙商证券-21页.pdf VIP
- GB 50650-2011(2022年版) 石油化工装置防雷设计规范.docx VIP
- 城市轨道交通客运组织全书教学课件电子教案.pptx VIP
- 杭叉J系列1-5吨 电动叉车使用手册.pdf VIP
- 110KV送出线路施工安全措施.doc VIP
- 第一部分第二.三节兴趣与职业生涯发展的关系.ppt VIP
文档评论(0)