DS002.2 线性表 (II).pptVIP

  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文档。上传文档
查看更多
DS002.2 线性表 (II)

Data Structure Chapter 2: Linear Table 第二章 线性表 《数据结构》 College of Science, Xidian University 第二章 线性表 (II) 西安电子科技大学·理学院 hjTang@xidian.edu.cn 有关线性表顺序表示的算法 静态顺序表 顺序表的查找 无序表上的查找 有序表上的查找 顺序表的排序 选择排序 插入排序 冒泡排序 顺序表的查找 顺序查找 从表中的第一个记录开始,逐个进行记录关键字和给定值的比较,如果比较值相等,则查找成功;反之,若直至最后一个记录的关键字的值与给定值不相等,表明表中没有所查找的记录,查找不成功 查找性能分析 平均查找长度ASL Pi为查找第i个记录的概率 顺序查找的Pi Ci = (i+1) Pi = 1/N 查找不成功的概率 假定查找成功的概率为1/2: 查找不成功要查找的长度为 N+1 查找每个元素的概率为 1/2N 平均查找长度ASL 有序表的查找——折半查找 折半查找(查找失败) 折半查找算法描述 折半查找性能分析 新思想 顺序查找与折半查找的特点 与元素个数有密切的关系 数据连续存放 数据存放与空间大小一致 能否做到几乎一次就能知道元素位置? 查找的时间复杂度几乎是O(1)的 Hash——哈希!!! 思想 将元素按照某种顺序存放,要查找元素,则按存储顺序存放即可(按学号排列) 元素存放可以不连续 存放元素的空间远大于元素个数 Hash表(II) 有4个人,分别叫john, mike, dave, mary. 现将他们按关键字存放在长度为11的线性表L中. Hash函数 将关键字按照某种顺序存放 将名字按字符加起来,再模11 f(john) = (‘j’+’o’+’h’+’n’)%11 f(john) = (431)%11 = 2 f(mike) = (422) % 11 = 4 f(dave) = (416) % 11 = 9 f(mary) = (441) % 11 = 1 我们称函数f为一个Hash函数 Hash函数: 将关键字变换到[0~N)地址的函数 Hash表如何查找 要查找mike 计算f(mike) f(mike) = (422) % 11 = 4 检查L[4]是否为“mike” 平均查找长度 ASL = 1 Hash表的问题 在表中再插入”bill” f(bill)=419%11=1 f(mary)=1 ——地址冲突 查找bill f(bill) = 1 检查L[1]是否为”bill” 不是,则继续检查下一个空间 退出:或已经查找到,或下一空间无数据 排序 将线性表中的元素按从小到大的顺序重新排列 排序 内部排序:待排序的记录全部在内存中 外部排序:待排序的记录部分在内存中 待排序的数据结构 常用排序 选择、插入、冒泡、归并 选择排序 思想:每次选择一个最小的元素调换到前面 选择排序算法 插入排序 假定前i个元素是有序的,然后将后面的元素依次插入到前面的有序表中 插入排序算法 冒泡排序 思想:每次比较相邻的两个元素,大者向下移动,小者向上移动 归并排序 思想:将两个有序表合成一个有序表 排序算法之比较 课程内容 顺序表的查找 普通查找算法 折半查找算法 Hash表 排序算法 选择 插入 冒泡 归并 * * Data Structure Chapter 2: Linear Table typedef struct { int key; char info[100]; } ElemType; #define LIST_INIT_SIZE 100 #define LIST_INCREMENT 10 typedef struct { ElemType *elem; // 元素仓库 int length; // 当前有效的元素个数 int listsize; // 当前分配的存储容量 } SqList; #define MAX_SIZE 100 typedef struct { ElemType elem[MAX_SIZE+1]; //元素仓库 int length; // 当前有效的元素个数 } SList; 回排序 int Search_SList(SList *L, int key) { L-elem[L-length].key = key; for (int i=0; key != L-elem[i].key; i++); // for (int i=0; iL-length; i++) if (key == L-elem[i].k) break; if (i == L-length) return -1;

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档