- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
01/06/2002 数据结构讲义 第二章 顺序表及其应用 顺序表的基本概念 顺序表基本算法 顺序表的应用1—排序问题 顺序表的应用2—查找问题 顺序表的应用3—字符处理问题 顺序表的基本概念 顺序表,是指满足以下条件的数据结构:数据元素有限且数据类型相同;为线性逻辑结构;为顺序存储结构。 顺序表基本算法 顺序表基本算法—按值查找 顺序表基本算法—插入 int SqlInsert (SqL *L,int i,datatype x) { int j; if (L-last == MAX-1) { printf("表满"); return(-1); } /*表已满,不能插入*/ if (i1 || iL-last+2) /*检查插入位置的正确性*/ { printf("位置错"); return(0); } for(j=L-last; j=i-1; j--) L-data[j+1]=L-data[j]; /* 结点移动 */ L-data[i-1]=x; /*新元素插入*/ L-last++; /*last仍指向最后元素*/ return (1); /*插入成功,返回*/ } 顺序表基本算法—删除运算 int SqlDelete (SqL *L;int i) { int j; if(i1 || iL-last+1) /*检查删除位置的合法性*/ { printf ("不存在第i个元素"); return(0); } for(j=i; j=L-last; j++) L-data[j-1]=L-data[j]; /*向上移动*/ L-last--; return(1); /*删除成功*/ } 顺序表的应用1—排序问题 直接插入排序--算法思想与示例 直接插入排序--算法实现 希尔排序--算法思想与示例 希尔排序--算法实现 冒泡排序--算法思想与示例 冒泡排序--算法实现 快速排序--算法思想与示例 快速排序--算法实现 直接选择排序--算法思想与示例 直接选择排序--算法实现 归并排序--算法思想与示例 归并排序--算法实现 排序小结 顺序表的应用2—查找问题 可以使用三种方法对顺序表实现查找: 顺序查找。基本思想:从顺序表的一端开始顺序扫描,将给定值与各数据元素(关键字)比较。 二分查找。也称折半查找。仅应用于数据元素的关键字按大小排序的顺序表;基本思想:将表中间位置的关键字与要查找的关键字K比较,如果两者相等,则查找成功;否则,将顺序表分成前后两个子表,确定K所在子表后继续查找。 分块查找。也称索引顺序查找。主要针对分块有序表:整个顺序表分成多个块,块内无序但块间有序(每块中的所有数据元素均小于或大于其后各块中的数据元素)。基本思想:创建一个索引表,为每块设置一个索引项,每个索引项记录该块的起始位置和该块中的最大或最小关键字。索引表按关键字有序排列。然后先在索引表中应用二分查找或顺序查找确定查找项所在的块,再在块中进行顺序查找。 顺序查找 二分查找 分块查找 三种查找算法性能比较 习题讲解 * 思考: 如果顺序表的第一元素的地址为 a1,每个元素占用k个存储单元,试确定第n个元素的存储位置。 使用什么数据类型存储顺序表? 顺序表的基本运算。与解决的具体问题有关。一般包括:置空表(将顺序表置成空表)、求表长(返回顺序表的长度)、按序号取元素(返回顺序表中序号为n的数据元素)、按值查找(返回数据元素x在顺序表的位置)、插入(在顺序表的第i个位置插入数据元素x)、删除(在顺序表中删除第i个位置的数据元素)。 an=a1+(n-1)k。 数组 顺序表定义 置空顺序表 求表长 时间性能分析 每个算法中语句总的执行次数与表长(问题的规模)无关,时间复杂度为O(1)。 空间性能分析 所需空间均用于存储算法本身所用的指令、常数和变量,空间性能好。但顺序表定义中数组的大小要把握好,否则会造成空间浪费。 按序号取元素 typedef struct {datatype data[MAX]; int last; } SqL; Void SqlSetNull(SqL *L) { L-last=-1; } Int SqlLength(SqL *L) {return L
原创力文档


文档评论(0)