- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构c语言PPT2
线性表的抽象数据类型定义: ADT List { 数据对象:D={ ai | ai ?ElemSet, i=1,2,…n, n?0 } 数据关系: R={ai-1,ai | ai-1,ai ?D, i=1,2,…n} 基本运算: InitList(L); DestroyList(L); Length(L); GetElem(L,i,e); LocateElem(L,e,compare()); InsertElem(L,i,e); DeleteElem(L,i,e); …… } ADT List 练习1:两个线性表LA和LB分别表示两个集合A和B, 现求一个新的集合A=A∪B。 void MergeList( List La, List Lb, List Lc) { InitList(Lc); La_len = ListLength(La); Lb_len = ListLength(Lb); i=j=1; k=0; while( (i=La_len) (j=Lb_len)){ GetElem(La, i, a); GetElem(Lb, j, b); if(a=b) { ListInsert(Lc, ++k, a); ++i; } else { ListInsert(Lc, ++k, b); ++j; } } while(i=La_len){ GetElem(La, i++, a); ListInsert(Lc, ++k, a);} while(j=Lb_len){ GetElem(Lb, j++, b); ListInsert(Lc, ++k, b);} } O(ListLength(La)+ListLength(Lb)) 顺序表上插入运算效率分析: 时间复杂度 最好情况: 在表尾插入,不移动元素,T(n)=O(1) 最坏情况: 在表头插入,移动n个元素,T(n)=O(n) 平均复杂度 设pi为在第i个元素之前插入一个元素的概率,且P1=P2=…=Pi=…=Pn=1/(n+1),则平均移动次数为: 顺序表的归并,表中元素非递减排列。 void MergeList_Sq (SqList La, SqList Lb, SqList Lc) { pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; pc = Lc.elem = (ElemType *)malloc(…); if(!Lc.elem) exit(OVERFLOW); pa_last = La.elem+La.length-1; pb_last = Lb.elem+Lb.length-1; while( (pa=pa_last)pb=pb_last)){ if(*pa=*pb) *pc++ = *pa++; else *pc++ = *pb++; } while(pa=pa_last) *pc++ = *pa++; while(pb=pb_last) *pc++ = *pb++; } 练习2.29 已知A、B、C为三个元素值递增有序的顺序表,现要求对A作如下运算,删去那些即在B中出现又在C中出现的元素,实现上述算法并分析时间复杂度。 A = A-(B∩C) A = (1, 2, 6, 6, 8, 9, 10, 10, 11, 15) B = (1, 2, 6, 6, 7, 9, 10, 15) C = (3, 4, 6, 7, 7, 9, 9, 9, 10, 12) A = (1, 2, 8, 11,15) 分析: 先从B和C中找出公有元素,记为same; A中从当前位置开始, 凡小于same的元素均保留(存到新的位置),等于same的跳过; 大于same时就再找下一个same. void SqList_Intersect_Delete( SqList A, SqList B, SqList C) { pa = A.elem; pa_last; pb; pb_last; pc; pc_last; p0=A.elem; while((pa=pa
文档评论(0)