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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构实验一:多项式乘法问题

發(fā)布時(shí)間:2024/5/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构实验一:多项式乘法问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Exp01 多項(xiàng)式乘法問(wèn)題

Author: Maskros

實(shí)驗(yàn)?zāi)康?/h2>

設(shè)計(jì)一個(gè)一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器

實(shí)驗(yàn)內(nèi)容與要求

一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器的基本功能是:

(1)輸入并建立多項(xiàng)式。

(2)輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1,c2,e2,...,cn,enn,c_1,e_1,c_2,e_2,...,c_n,e_nn,c1?,e1?,c2?,e2?,...,cn?,en?, 其中 nnn 是多項(xiàng)式的項(xiàng)數(shù),cic_ici?eie_iei? 分別是第 iii 項(xiàng)的系數(shù)和指數(shù),序列按指數(shù) 降序排列。

(3)多項(xiàng)式 aaa 與多項(xiàng)式 bbb 相乘,建立多項(xiàng)式。

實(shí)驗(yàn)內(nèi)容和實(shí)驗(yàn)步驟

在這里我們分別通過(guò)順序表和鏈表兩種方法來(lái)實(shí)現(xiàn)實(shí)驗(yàn)要求

  • 大體思路:
    • 鏈表 O(N2)O(N^2)O(N2)
      • 結(jié)構(gòu)體Pol存儲(chǔ)多項(xiàng)式每項(xiàng)的系數(shù)和指數(shù)
      • CreatePol(Pol *&head)函數(shù)用于接收輸入的多項(xiàng)式元素,創(chuàng)建一個(gè)多項(xiàng)式
      • PrintPol(Pol *&head)函數(shù)用于打印多項(xiàng)式
      • MultiPol(Pol *&a, Pol *&b, Pol *&c)函數(shù)用于實(shí)現(xiàn)多項(xiàng)式的乘法,每次插入一項(xiàng)順序遍歷新鏈表 ,按指數(shù)升序插入或合并,最后得到以 *c為頭結(jié)點(diǎn)的鏈表,即所求結(jié)果
      • Getlength(Pol &pol)函數(shù)遍歷鏈表返回多項(xiàng)式的項(xiàng)數(shù),用于打印時(shí)使用
      • ps:計(jì)算出來(lái)是空項(xiàng)的判斷依據(jù)為 pol->c=0 , 故在輸出和計(jì)算長(zhǎng)度時(shí)將其直接忽略
    • 順序表 O((logN)2)O((logN)^2)O((logN)2)
      • 使用定義的map類(lèi)型 typedef map<int, int> Pol存儲(chǔ)多項(xiàng)式每項(xiàng)的系數(shù)和指數(shù), key為指數(shù),value為系數(shù),map.size()為多項(xiàng)式項(xiàng)數(shù)
      • create()函數(shù)用于接收輸入的多項(xiàng)式元素,創(chuàng)建一個(gè)多項(xiàng)式
      • print(Pol &pol)函數(shù)用于打印多項(xiàng)式
      • multi(Pol &p1, Pol &p2)函數(shù)用于實(shí)現(xiàn)多項(xiàng)式的乘法,完成合并后,返回一個(gè)Pol類(lèi)型的多項(xiàng)式
      • 使用map的好處:由于map遍歷的特性,不用再次從小到大排序,并且易于查找和合并同類(lèi)項(xiàng)
  • 輸入形式:兩個(gè)多項(xiàng)式,兩個(gè)整數(shù)序列 n,c1,e1,c2,e2,...,cn,enn,c_1,e_1,c_2,e_2,...,c_n,e_nn,c1?,e1?,c2?,e2?,...,cn?,en?, 其中 nnn 是多項(xiàng)式的項(xiàng)數(shù),cic_ici?eie_iei? 分別是第 iii 項(xiàng)的系數(shù)和指數(shù),序列按指數(shù) 降序排列
  • 輸出形式:一個(gè)整數(shù)序列 n,c1,e1,c2,e2,...,cn,enn,c_1,e_1,c_2,e_2,...,c_n,e_nn,c1?,e1?,c2?,e2?,...,cn?,en?,標(biāo)號(hào)規(guī)則同上

鏈表實(shí)現(xiàn)

//presented by Maskros - 2021/03/31 #include<bits/stdc++.h> using namespace std; struct Pol{int c; //coefficientint e; //exponentPol *next; }; int Getlength(Pol *&head){ //Calculate the number of terms in a polynomialif(head==NULL) {cout<<"NO_ELEM_ERROR"<<endl; return 0;}Pol *p=head;int cnt=0;while(p->next!=NULL){p=p->next;if(p->c==0) cnt--; //Empty items are not included in the countcnt++;}return cnt; }void CreatePol(Pol *&head){ //Create a polynomial//initializationhead=(Pol *) new Pol;head->c=0;head->e=0;head->next=NULL;Pol *pol=head;int n; cin>>n;for(int i=1;i<=n;i++){pol->next=(Pol *) new Pol; pol=pol->next;cin>>pol->c>>pol->e;pol->next=NULL;}return; } void PrintPol(Pol *&head){ //Print polynomial Pol *p=head;int n=Getlength(p);cout<<n<<" ";while(p->next!=NULL){p=p->next;if(p->c!=0) cout<<p->c<<" "<<p->e<<" "; //Do not print empty items}return; } void MultiPol(Pol *&a, Pol *&b, Pol *&c){ //Polynomial multiplicationPol *p1=a, *p2=b;int tmpc,tmpe;bool t; //Check if the item has been insertedc=(Pol *) new Pol;c->c=0; c->e=0; c->next=NULL; //initializationPol *p3,*pre; //$pre$ is the node before the current positionwhile(p1->next!=NULL){p1=p1->next;p2=b;while(p2->next!=NULL){p2=p2->next;t=false;tmpc=p1->c*p2->c;tmpe=p1->e+p2->e;p3=c;pre=c;while(p3->next!=NULL){ p3=p3->next;if(p3->e>tmpe){ //The insertion position is before the current positionpre->next=(Pol *)new Pol;pre=pre->next;pre->e=tmpe;pre->c=tmpc;pre->next=p3;t=true;}else if(p3->e==tmpe){ //Combine similar items at current locationp3->c+=tmpc;t=true;}else if(p3->next!=NULL && p3->e<tmpe && p3->next->e>tmpe){ //The insertion position is after the current positionpre=p3->next;p3->next=(Pol *)new Pol;p3=p3->next;p3->e=tmpe;p3->c=tmpc;p3->next=pre;t=true;}if(t==true) break;pre=p3;}if(t==false){ //Insertion position is at the end of the linked listp3->next=(Pol *)new Pol;p3=p3->next;p3->e=tmpe;p3->c=tmpc;p3->next=NULL;}}}return ; } int main(){Pol *p1,*p2,*p3;p1=NULL,p2=NULL,p3=NULL;CreatePol(p1);CreatePol(p2);MultiPol(p1,p2,p3);PrintPol(p3);return 0; }

順序表實(shí)現(xiàn)

//presented by Maskros - 2021/03/31 #include<bits/stdc++.h> using namespace std; typedef map<int, int> Pol; Pol p1,p2,p3; void create(Pol &pol){ //Create a polynomialint co,ex,n;cin>>n;for(int i=1;i<=n;i++){cin>>co>>ex;pol[ex]+=co; } } void print(Pol &pol){ //Print polynomialmap<int,int>::iterator it;cout<<pol.size()<<" ";for(it=pol.begin();it!=pol.end();it++){cout<<it->second<<" "<<it->first<<" "; } } Pol multi(Pol &p1, Pol &p2){ //Polynomial multiplicationPol p3;map<int,int>::iterator it1,it2;for(it1=p1.begin();it1!=p1.end();it1++){for(it2=p2.begin();it2!=p2.end();it2++){p3[it1->first+it2->first]+=it1->second*it2->second; //Insert p3 after multiplying directlyif(p3[it1->first+it2->first]==0) p3.erase(it1->first+it2->first); //Delete extra items}}return p3; } int main(){create(p1);create(p2);p3=multi(p1,p2);print(p3);return 0; }

實(shí)驗(yàn)用測(cè)試數(shù)據(jù)和相關(guān)結(jié)果分析

INPUT1: 2 1 2 3 4 3 1 3 1 5 2 6 OUTPUT1: 5 1 5 4 7 2 8 3 9 6 10INPUT2: 3 2 0 3 2 4 3 3 -1 0 1 1 4 3 OUTPUT2: 7 -2 0 2 1 -3 2 7 3 4 4 12 5 16 6IUPUT3: 3 -1 -1 1 0 1 1 2 2 -2 3 2 OUTPUT3: 6 -2 -3 2 -2 2 -1 -3 1 3 2 3 3INPUT4: 2 1 0 1 1 2 -1 0 1 1 OUTPUT4: 2 -1 0 1 2
  • 結(jié)果分析:由此可見(jiàn),無(wú)論是錯(cuò)序合并,系數(shù)、項(xiàng)數(shù)取正、負(fù)、零,以及結(jié)果出現(xiàn)零項(xiàng)的處理均可實(shí)現(xiàn),輸出正確答案

實(shí)驗(yàn)總結(jié)

  • 鏈表寫(xiě)起來(lái)比較基礎(chǔ),對(duì)于插入、遍歷、刪除等操作無(wú)法取巧,包括在計(jì)算多項(xiàng)式的長(zhǎng)度時(shí)都需要遍歷,只能扎扎實(shí)實(shí)來(lái)寫(xiě),排序的工作在插入的時(shí)候直接就按照順序插入來(lái)完成,如果數(shù)據(jù)量比較大的話(huà)感覺(jué)時(shí)間復(fù)雜度有點(diǎn)高,所以有點(diǎn)小麻煩,但是感覺(jué)寫(xiě)下來(lái)一趟,強(qiáng)化了我對(duì)于指針、地址、空間等方面的理解,寫(xiě)起來(lái)也沒(méi)有之前那么生疏了
  • 順序表一開(kāi)始打算用 struct 型的 vector 來(lái)存,然后直接插入,最后再sort()一下方便排序,結(jié)果在相同項(xiàng)合并的操作上發(fā)現(xiàn)還是需要像鏈表一樣遍歷去查找位置,所以感覺(jué)有點(diǎn)麻煩,本來(lái)寫(xiě)好了就全刪了,換了一種思路,用 map 來(lái)實(shí)現(xiàn)
    式的長(zhǎng)度時(shí)都需要遍歷,只能扎扎實(shí)實(shí)來(lái)寫(xiě),排序的工作在插入的時(shí)候直接就按照順序插入來(lái)完成,如果數(shù)據(jù)量比較大的話(huà)感覺(jué)時(shí)間復(fù)雜度有點(diǎn)高,所以有點(diǎn)小麻煩,但是感覺(jué)寫(xiě)下來(lái)一趟,強(qiáng)化了我對(duì)于指針、地址、空間等方面的理解,寫(xiě)起來(lái)也沒(méi)有之前那么生疏了
  • 順序表一開(kāi)始打算用 struct 型的 vector 來(lái)存,然后直接插入,最后再sort()一下方便排序,結(jié)果在相同項(xiàng)合并的操作上發(fā)現(xiàn)還是需要像鏈表一樣遍歷去查找位置,所以感覺(jué)有點(diǎn)麻煩,本來(lái)寫(xiě)好了就全刪了,換了一種思路,用 map 來(lái)實(shí)現(xiàn)
  • 用 map 太爽了,30來(lái)行就完事了,不用手動(dòng)排序,查找合并也很方便,除了加了一個(gè)空項(xiàng)的erase()刪除工作,基本上沒(méi)什么坑,遍歷也很舒服,stl永遠(yuǎn)滴神

總結(jié)

以上是生活随笔為你收集整理的数据结构实验一:多项式乘法问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 翔田千里x88aⅴ | 喷水在线观看 | 精品久久久久久久无码 | 国产欧美精品一区二区三区app | 日韩人妻一区 | 可以免费看污视频的网站 | 国产一区二区三区视频免费在线观看 | 欧美日韩国产综合在线 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲欧美综合视频 | 人人妻人人爽人人澡人人精品 | 好大好舒服视频 | 视频在线一区二区 | 成人av电影在线观看 | 性一交一乱一伧老太 | 亚洲插插| 日韩色图片| 精精国产xxxx视频在线 | 日韩久久一区二区 | 国产成人无码一区二区在线播放 | 日本三级黄在线观看 | 欧美1| 免费激情小视频 | 黄色av大全 | 亚洲综合一 | 日本sm调教—视频|vk | 日韩成人黄色 | 四虎久久久久 | 伊人精品综合 | 夜夜噜噜噜 | 在线看a网站 | 婷婷激情成人 | 91av小视频| 国产精品一区不卡 | 国产a一区 | 成人无码www在线看免费 | 国产在线播放网站 | 亚洲精品乱码久久久久久蜜桃麻豆 | 不卡的av在线免费观看 | 国产天堂av在线 | 久久综合中文字幕 | 91精品国产aⅴ一区二区 | 狼人精品一区二区三区在线 | 久久人人爽人人爽人人片av免费 | 免费的av | 亚洲视屏一区 | 又黄又爽的网站 | 91视频久久久久 | www.88av| 91夫妻论坛 | 捆绑黑丝美女 | 成人黄色一级视频 | 亚洲熟妇av一区二区三区漫画 | 日韩精品在线电影 | www..com黄色 | 性色视频网站 | 中文字字幕一区二区三区四区五区 | 高h放荡受浪受bl | 欧美色拍 | 日日夜夜草| 国产艳俗歌舞表演hd | 91欧美成人 | 日韩在线精品视频一区二区涩爱 | 欧美成人综合一区 | 波多野结衣加勒比 | 国产美女视频 | 亚洲精品视频免费看 | 久草免费资源站 | av资源共享 | 国产在线你懂得 | 久久久九九九热 | 狂野少女电影在线观看国语版免费 | 欧美黑人一区二区 | 成人国产一区二区三区精品麻豆 | 97视频精品 | 国产精品久久久久久av | 欧美一区二 | 五月婷婷天堂 | 自拍偷拍亚洲一区 | 黄色免费国产 | 国产黄视频在线观看 | 18女人毛片 | 四虎在线看片 | 一区二区三区欧美 | 熟妇高潮一区二区三区在线播放 | 欧美一级在线免费观看 | 欧美日韩中文字幕在线视频 | 亚洲免费观看高清 | 男女日皮视频 | av网在线播放 | 波多野在线视频 | 91成人免费电影 | 日韩人妻一区二区三区蜜桃 | 国产成人精品视频 | 在线艹| av老司机在线观看 | 国产精品一二三四区 | 被黑人啪到哭的番号922在线 | 欧美一区二三区 |