- 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
第二章 线性表 线性表的定义、逻辑结构特点及基本运算 线性表的顺序存储及基本运算 线性表的链式存储及基本运算 数组的逻辑结构定义及其存储方式 线性表的应用 元素的含义 数据元素在不同问题中的含义各不相同 可以是一个数、一个符号,一个记录,或其它更复杂的信息 这里的学生成绩表是一个线性表 数据元素是每一个学生的信息,包括:学号、姓名、成绩共三个数据项 线性表上常用的的运算 基本运算 初始化线性表 表置空 求线性表中第i个元素 查找满足给定条件的数据元素 在线性表的第i个位置之前插入一个新的数据元素 删除线性表中的第i个数据元素 查找表中第i个元素的前驱 查找表中第i个元素的后继 按一个或多个数据项值的递增或递减次序重新排列线性表中的数据元素 实际应用中,根据不同的要求选择适当的基本运算解决问题 线性表的实现-顺序存储结构 20个学生的线性表,试用顺序表来存储这些信息 typedef struct { char name[9]; char no[8]; float score }STUDENT; STUDENT s[20]; 顺序表的类型定义 #define MAXSIZE maxlen //maxlen表示线性表可能的最大数据元素数目 typedef int elemtype; //elemtype表示数据元素类型,此处定义为int typedef struct { elemtype v[Maxsize]; //存放线性表元素的数组 int len; //表示线性表的长度 }sqlist; //sqlist是数据类型的名称 //sqlist是一种新的,自定义的数据类型 //这种类型就是顺序表类型 顺序表的类型定义 两种使用方法 sqlist L; L.v[i] L.len sqlist *sq; sq=(sqlist *)malloc(sizeof(sqlist)); sq-v[i] sq-len 顺序表的基本运算 顺序表上的基本运算 插入算法 在线性表的第i个数据元素前,插入一个新数据元素,使线性表的长度从n变成n+1 (a1, …, ai-1, ai, …, an) (a1, …, ai-1, x, ai, …, an) 顺序表的插入算法 判断线性表的存储空间是否已满,若已满,则进行“溢出”处理 检查i值是否超出允许的范围(1≤i≤len+1),若超出,则进行“超出”处理 如果上述条件都允许,则将最后一个元素到第i个元素依次向后移动一个位置 将新的数据元素写到第i个位置上 线性表的长度增加1,插入成功 插入算法的时间复杂度 插入算法的主要时间用于移动数据元素,该语句循环执行的次数为n-i+1 当i=n+1时,移动次数为0 当i=1时,移动次数为n 算法的最坏情况时间复杂度:O(n) 算法的最好情况时间复杂度:O(1) 插入算法的时间复杂度 假设在第i个元素之前插入一个元素的概率为Pi,所需移动数据元素的平均次数为: 顺序表上的基本运算 删除操作 将线性表的第i个数据元素删去,使长为n的线性表变成长为n-1的线性表 (a1 ,...,ai-1 ,ai ,ai+1 ,...,an ) (a1 ,...,ai-1 ,ai+1 ,...,an ) 顺序表的删除算法 算法思路 判断i值是否超出允许的范围(1≤i≤len),若是,则进行“超出范围”处理; 否则,保存第i个元素的值; 将第i个元素后的所有元素依次向前移动一个位置; 线性表长度减1,删除成功 int delete(sqlist *L,int i,elemtype *y) ; 删除算法的时间复杂度 删除算法的主要时间用于移动数据元素,该循环语句执行的次数为n-i 当i=1时,移动n-1 个 当i=n时,不需移动 算法的最坏情况时间复杂度:O(n) 算法的最好情况时间复杂度:O(1) 删除算法的时间复杂度 设删除第i个元素的概率为qi,所需移动数据元素的平均次数为: 顺序表的基本运算 求线性表的长度 int lenth(sqlist *L) { int len; len=L-len; return(len); //返回线性表的长度 } 顺序表上的基本运算 查找 查找指定数据元素x在表中的位置序号,若v[i]==x,则算法返回值为i+1,若不存在数据元素x,则返回0 顺序存储结构的优缺点 静态操作容易实现 根据定位公式容易确定表中元素的存储位置 元素随机存取 作业 编写完整的源程序实现顺序表的插入,删除算法. P21,综合题5,6,7 线性表的链式存储结构 链表 以链式结构存储的线性表 用一组在物理位置上任意
文档评论(0)