- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章(程佩佩数据结构课件)
1 单 链 表 习题、考研题: 1. 3-4 2. 3-6 3. 回收一个循环链表 private: ListTermpoly; } 2) 多项式加法 A(X)+B(X)==》A(X) pc pa last AH-First BH-First 2 100 3 14 2 8 1 0 -2 100 8 14 -3 10 10 6 -1 1 返回多项式 pb last -3 10 2 8 10 6 -1 1 1 0 last CH-First 11 14 具体实现时,并不要再重新申请结点,完全利用原来两个链表的结点。 方法:设4个流动指针: ListNodeTerm*pa, *pb, *pc, *p (指AH) (指BH) (指向结果) (工作流动指针,为释放结点用) 1)初始化:pc , pa , pb ,并把BH的表头结点删除了; 2)当pa和pb都有项时 pc永远指向相加时结果链表的最后一个结点。 a)指数相等( pa?exp= =pb?exp ) 对应系数相加:pa?cofe=pa?cofe + pb?cofe ; p= pb ; pb前进 ; 删除p所指结点; if (系数相加结果为0){p=pa; pa前进; 删除p所指结点} else { pc?link=pa; pc=pa; pa前进} b)指数不等 pa?exp pb?exp //pb要插入结果链表 {pc?link=pb ; pc=pb ; pb前进} c)指数不等 pa?exp pb?exp //pa要插入结果链表 {pc?link=pa ; pc=pa ; pa前进} 3)当两链表中有一链表为空,则将另一链表链入结果链表就可以 if (pb空了){ pc?link=pa;} else pc?link=pb; 算法分析:设两个多项式的长度分别是m和n,则总的比较次数 为O(m+n) 4 双 向 链 表(Doubly Linked List) 每个结点 (但经常采用带表头结点的循环链表) llink(左指针) data rlink(右指针) first a0 a1 an-1 Current 空表 first Current=Null 对于单链表或循环链表插入或删除都要知道两个指针(一前一后), 对双链表而言,只要知道一个。 p=p?lLink?rLink=p?rLink?lLink; p llink rlink 双链表部分成员函数的实现 插入 (Insert) 把含给定值Value的新结点插入到当前指针(current)所指结点的后面。 first Current=Null first current Value current = first?rLink = new DblNode (value,first,first); current?rLink?lLink = current; ai-1 ai ai+1 current Value 非空表 分析:*空表 结点需要申请形成 current?rLink = new DblNode (value, current, current?rLink ); current = current?rLink ; current?rLink?lLink = current ; 先假设插入的结点为p所指向的结点 ai
文档评论(0)