- 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 线性表的基本概念 1、线性表 它是一种最简单的线性结构。是一种可以在任意位置进行插入和删除数据元素操作的,由n(n≥0)个相同类型数据元素a0, a1, … , an-1组成的线性结构。 ( A, B, C, D, …… , Z) (1) 逻辑上相邻的数据元素,其物理上也相邻; (2) 若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出。 例:试用C或类C语言编写一高效算法,将一顺序存储的线性表(设元素均为整型量)中所有零元素向表尾集中,其他元素则顺序向表头方向集中。 (a1, a2, … ai-1,ai, ai+1 ,…, an) 6、其它一些操作实现 1、 清空操作 void ClearList(SqList L) 2. 判空操作 bool ListEmpty(SqList L) 2. 查找指定序号的元素 ElemType GetElem(SqList L, int pos) 7、 顺序表操作的效率分析 算法时间主要耗费在移动元素的操作上,因此 计算时间复杂度的基本操作(最深层语句频度) T(n)= O (移动元素次数) 而移动元素的个数取决于插入或删除元素的位置. 教材P25有对执行效率的推导:(与课本略有区别) 例:请画出26个英文字母表的链式存储结构。 四、用单链表实现线性表上其它的操作 1. 初始化单链表 void InitList(LNode* HL) { HL=NULL; }//O(1) 2. 检查单链表是否为空 bool ListEmpty(LNode* HL) { return (HL==NULL); } // O(1) 3. 删除单链表中结点,使之成为空表 void ClearList(LNode* HL) { LNode *cp, *np; cp=HL; while(cp!=NULL) { np=cp-next;cp-next=np-next; delete cp;} HL=NULL; } //O(n) 4. 得到单链表的长度 int ListSize(LNode* HL) //带头结点? { P=HL-next; int i=0; while(P!=NULL) { i++; P = P -next; } return i; } //O(n) 5. 得到单链表中第pos个结点中的元素 ElemType GetElem(LNode* HL, int pos) { if(pos1) { cerrpos is out range!endl; exit(1); } i=0; P=HL-next; while(P!=NULL){ i++; if(i==pos) break; P = P -next; } if(P!=NULL) return P -data; else{ cerrpos is out range!endl; exit(1);} } //O(n) 6. 遍历一个单链表 void TraverseList(LNode* HL) { P=HL-next; while(P!=NULL) { coutHL-data ; P = P -next; } coutendl; } O(n) 7. 查找具有给定值的第一个元素 bool Find(LNode* HL, ElemType item) { LNode* p=HL;int i=1; while(p!=NULL) if (p-data==item) { return i; } else {p=p-next;i++;} return false; } O(n) 五、单链表的操作效率分析 (1) 查找 :因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 七、 静态链表 静态链表:在数组
文档评论(0)