日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链表应用——多项式相加

發(fā)布時間:2024/1/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表应用——多项式相加 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

f(X)=1+x+x2+x5

g(X)=x3+x6+x8+x100

f(X)+g(X)=1+x+x2+x3+x5+x6+x8+x100

兩個有序多項式相加合并問題:?

顯然第一個想到的是用數(shù)組解決,可仔細想一想,數(shù)組有諸多弊端,比如大量空間浪費,無法同時存儲系數(shù)和指數(shù)(當然可以用結構體數(shù)組,但那不還是鏈表嗎),插入刪除都需移動大量數(shù)據(jù),索性,就用單鏈表解決吧

思路如下:

1)將f(X)和g(X)分別存儲在兩個單向鏈表內(nèi),每個節(jié)點存儲多項式的一項,內(nèi)含系數(shù)和指數(shù),并指向下一項節(jié)點,連貫成一個多項式,頭結點分別是head1,和head2;

2)接下來就是兩個多項式合并同類項了(初中貌似最喜歡做這玩意了,可計算機可不如你啊),用Node?*p1=head->next;?指向f(X)的第一個項節(jié)點(head節(jié)點均為無數(shù)據(jù)的表頭),

Node?*p2=head->next;指向g(X)的的一項;?在定義兩個指針pre1=head1、pre2=head2(一會兒有用),準備工作基本做完了。

3)此算法的關鍵在于將兩個有序鏈表合并成一個,并依然有序;只需將f(X)看成主串,g(X)看成插入串即可,遍歷g(X)的各節(jié)點,比較其與f(X)各節(jié)點指數(shù)的大小,小的就插在前面,大的話指針p1就往后移,相等就合并,如果f(X)先遍歷到結尾,說明g(X)的其余項都比f(X)的最后一項的指數(shù)大,只需將f(X)的最后一個節(jié)點指向g(x)的剩余節(jié)點即可,最后別忘了把head2刪了,因為它是個沒有數(shù)據(jù)的節(jié)點。

好了還是上代碼吧:

#include<iostream>
using?namespace?std;

typedef?struct?node
{
????int?coe;?????//系數(shù)
????int?exp;?????//指數(shù)
????struct?node?*next;
}Node;
/生成鏈表
Node?*Create()
{
????Node?*head=new?Node;
????head->next=NULL;
????Node?*p=head;
????int?n;???????????//項數(shù)
????cout<<"N:";
????cin>>n;
????for(int?i=0;i<n;i++)
????{
??????p->next=new?Node?;
??????p=p->next;
??????cin>>p->coe>>p->exp;
??????p->next=NULL;

????}
????return?head;
}

int?main()
{
????Node?*head1=Create();
????Node?*head2=Create();
????Node?*p1=head1->next,*p2=head2->next;
????Node?*pre1=head1,*pre2=head2;?????//pre1指針用來指向比較節(jié)點的前一個節(jié)點
??????????????????????????????????????
//pre2指針用作temp
????while(p1?&&?p2)
????{
????????if(p1->exp?<?p2->exp)
????????{
????????????pre1=p1;
????????????p1=p1->next;
????????}
????????else?if(p1->exp?>?p2->exp)
????????{
????????????pre1->next=p2;
????????????pre2=p2->next;
????????????p2->next=p1;
????????????p2=pre2;
????????????pre1=pre1->next;
????????}
????????else?if(p1->exp?==?p2->exp)
????????{
????????????p1->coe+=p2->coe;
????????????pre2=p2;
????????????p2=p2->next;
????????????delete?pre2;
????????}

????}
????if(p1==NULL)
????{
???????pre1->next=p2;
????}
????delete?head2;
???Node?*temp=head1->next;
???while(temp)
???{
??????cout<<temp->coe<<'X'<<'('<<temp->exp<<')'<<"?";
??????temp=temp->next;
????}
????return?0;

}?

?

轉(zhuǎn)載于:https://www.cnblogs.com/gavindlutsw/archive/2011/09/24/2189784.html

總結

以上是生活随笔為你收集整理的链表应用——多项式相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。