- 1、本文档共69页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 数据结构-线性表
* * * * * * * * * * * * * * * * * 3、算法实现 方法一:使用pa和pb指针分别沿着两个链表向表尾移动,以指示当前被检测的结点。当paNULL且pbNULL时,可能出现3种情况: (1)pa-exppb-exp:将pa所指结点的数据域写入一个新的结点,并将新结点插入到ch链表尾,pa指针移向下一个元素。 (2) pa-exp=pb-exp:将pa和pb所指结点的系数相加,若结果不为零则产生一个新结点,将系数和结果写入数据域,并插入到ch链表尾。pa和pb指针都移向下一个元素。 (3) pa-exppb-exp:将pb所指结点的数据域写入一个新的结点,并将新结点插入到ch链表尾,pb指针移向下一个元素。 相加过程演示: 直到qa或qb为NULL 若qa==NULL,将B中剩余部分复制C上即可 若qb==NULL,将A中剩余部分复制C上即可 9 8 3 1 5 17 ah 22 7 8 1 ^ -9 8 bh 7 0 ^ pa pa pa pa pb pb pb ch pc 22 7 11 1 5 17 7 0 ^ pc pc pc pc pb=NULL pa=NULL 算法实现: /*建立以系数为c,指数为e的新结点,并把它插在pc所指结点的后面.链表后pc指向新链入的结点*/ void attach(float c, int e, polynom *pc) { term *s; s=new term; s-coef=c; s-exp=e; (*pc)-next=s; *pc=s; } /*以ah和bh为头指针的单链表分别表示多项式A(x)和B(x),ch为表示A(x)与B(x)和的多项式C(x)的链表头指针。为便于复算,本算法不破坏A(x)与B(X),C(x)另辟空间。多项式A(x)和B(x)均无表头结点*/ void PolyAdd1(polynom ah, polynom bh, polynom ch) { polynom pa,pb,pc,q; float x; int k; pa=ah; pb=bh; ch=new term; pc=ch; while(pa!=NULL pb!=NULL) { if(pa-exppb-exp) k=1; else if(pa-exp==pb-exp) k=2; else k=3; switch(k) { case 1:attach(pa-coef, pa-exp, pc); pa=pa-next;break; case 2:x=pa-coef+pb-coef; if(x!=0) attach(x, pa-exp, pc); pa=pa-next;pb=pb-next;break; case 3:attach(pb-coef, pb-exp, pc); pb=pb-next; } } while(pb!=NULL) {attach(pb-coef, pb-exp, pc); pb=pb-next;} while(pa!=NULL) {attach(pa-coef, pa-exp, pc); pa=pa-next;} pc-next=NULL; q=ch; ch=ch-next; free(q); } 方法二: 在运算过程中直接利用原来多项式的空间,其中A(x)和B(x)都是带表头结点的单链表。 9 8 3 1 5 17 ah 22 7 8 1 ^ -9 8 bh 7 0 ^ pa pa pa pa pb pb pb pb=NULL pa1 pb1 pa1 pa1 pa1 Pb1-next=NULL 11 算法描述: void PolyAdd2(polynom ah, polynom bh) { polynom pa,pa1,pb,pb1; float sum; int k; pa1=ah; pa=ah-next; pb1=bh; pb=bh-next ; while(pa!=NULL pb!=NULL) { if(pa-exppb-exp) k=1; else if(pa-exp==pb-exp) k=2; else k=3; switch(k) { case 1: pa1=pa; pa=pa-next;
文档评论(0)