數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器請瀏覽后下載,資料供參考,期待您的好評與關(guān)注!請瀏覽后下載,資料供參考,期待您的好評與關(guān)注!請瀏覽后下載,資料供參考,期待您的好評與關(guān)注!實(shí)習(xí)1、一元稀疏多項(xiàng)式計(jì)算器需求分析1.問題描述設(shè)計(jì)一個(gè)一元稀疏多項(xiàng)式簡單計(jì)算器。2.基本要求一元稀疏多項(xiàng)式簡單計(jì)算器的基本功能是:(1)輸入并建立多項(xiàng)式。(2)輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1,c2,e2,········,cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci,ei分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排列。(3)多項(xiàng)式a和b想加,建立多項(xiàng)式a+b。(4)多項(xiàng)式a和b想減,建立多項(xiàng)式a-b。3.測試數(shù)據(jù)(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x)(3)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)(4)(x+x3)+(-x-x3)=0(5)(x+x100)+(x100+x200)=(x+2x100+x200)(6)(x+x2+x3)+0=(x+x2+x3)(7)互換測試數(shù)據(jù)的前后兩個(gè)多項(xiàng)式。4.實(shí)現(xiàn)提示用帶表頭結(jié)點(diǎn)的單鏈表存儲(chǔ)多項(xiàng)式。二、概要設(shè)計(jì)為實(shí)現(xiàn)上述程序功能,應(yīng)用帶頭結(jié)點(diǎn)的單鏈表存儲(chǔ)多項(xiàng)式。為此需要一個(gè)抽象數(shù)據(jù)類型:一元多項(xiàng)式。1.抽象數(shù)據(jù)類型一元多項(xiàng)式定義為:ATDPloynomial{數(shù)據(jù)對象:D={ai|ai∈Termset,i=1,2,3···,m,m≥0Termset中的每個(gè)元素包含一個(gè)表示系數(shù)的實(shí)數(shù)和表示指數(shù)的整數(shù)}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>ai-1,ai∈D,且ai-1中的指數(shù)<ai中的指數(shù)的值,i=1,2,3···n}基本操作:Insert(p,h)初始條件:h已存在。操作結(jié)果:插入p項(xiàng)。CreateLinklist(head,m)操作結(jié)果:建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式。DestroyLinklist(p)初始條件:一元多項(xiàng)式p已存在。操作結(jié)果:銷毀一元多項(xiàng)式p。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第1頁。PrintLinklist(P)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第1頁。初始條件:一元多項(xiàng)式p已存在。操作結(jié)果:輸出一元多項(xiàng)式p。Compare(a,b)初始條件:項(xiàng)a,b已存在。操作結(jié)果:比較a,b中x的指數(shù)的大小。AddLinklist(pa,pb)初始條件:一元多項(xiàng)式pa,pb已存在。操作結(jié)果:完成一元多項(xiàng)式pa,pb的相加運(yùn)算。SubtractionLinklist(Sa,Sb)初始條件:一元多項(xiàng)式Sa,Sb已存在。操作結(jié)果:完成一元多項(xiàng)式Sa,Sb的相減運(yùn)算。}ATDPloynomial三、詳細(xì)設(shè)計(jì)(源代碼)(使用C語言)#include<stdio.h>#include<malloc.h>#definemaxlen10#definelarge999typedefstructLinklistomial{floatcoef;intexpn;structLinklistomial*next;}Linklistomial,*Linklist;//結(jié)點(diǎn)類型,指針類型voidInsert(Linklistp,Linklisth){//h已存在插入p項(xiàng)if(p->coef==0)free(p);//系數(shù)為0的話釋放結(jié)點(diǎn)else{Linklistq1,q2;q1=h;q2=h->next;while(q2&&p->expn<q2->expn){//查找插入位置q1=q2;q2=q2->next;}if(q2&&p->expn==q2->expn){//將指數(shù)相同相合并數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第2頁。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第2頁。free(p);if(!q2->coef){//系數(shù)為0的話釋放結(jié)點(diǎn)q1->next=q2->next;free(q2);}}else{//指數(shù)為新時(shí)將結(jié)點(diǎn)插入p->next=q2;q1->next=p;}}}LinklistCreateLinklist(Linklisthead,intm){//建立一個(gè)頭指針為head、項(xiàng)數(shù)為m的一元多項(xiàng)式inti;Linklistp;p=head=(Linklist)malloc(sizeof(structLinklistomial));head->next=NULL;for(i=0;i<m;i++){p=(Linklist)malloc(sizeof(structLinklistomial));//建立新結(jié)點(diǎn)以接收數(shù)據(jù)printf("請輸入第%d項(xiàng)的系數(shù)與指數(shù):",i+1);scanf("%f%d",&p->coef,&p->expn);Insert(p,head);//調(diào)用Insert函數(shù)插入結(jié)點(diǎn)}returnhead;}voidDestroyLinklist(Linklistp){//銷毀多項(xiàng)式pLinklistD1,D2;D1=p;while(D1){D2=D1->next;free(D1);D1=D2;}}voidPrintLinklist(LinklistP){//輸出一元多項(xiàng)式p數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第3頁。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第3頁。intflag=1;//項(xiàng)數(shù)計(jì)數(shù)器if(!q){//若多項(xiàng)式為空,輸出0putchar('0');printf("\n");return;}while(q){if(q->coef>0&&flag!=1)putchar('+');//系數(shù)大于0且不是第一項(xiàng)if(q->coef!=1&&q->coef!=-1){//系數(shù)非1或-1的普通情況printf("%g",q->coef);if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}else{if(q->coef==1){if(!q->expn)putchar('1');elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);}if(q->coef==-1){if(!q->expn)printf("-1");elseif(q->expn==1)printf("-X");elseprintf("-X^%d",q->expn);}}q=q->next;flag++;}printf("\n");}數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第4頁。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第4頁。{//比較a,b中x的指數(shù)的大小if(a&&b){if(!b||a->expn>b->expn)return1;elseif(!a||a->expn<b->expn)return-1;elsereturn0;}elseif(!a&&b)//a多項(xiàng)式已空,但b多項(xiàng)式非空return-1;else//b多項(xiàng)式已空,但a多項(xiàng)式非空return1;}LinklistAddLinklist(Linklistpa,Linklistpb){//求解并建立多項(xiàng)式a+b,返回其頭指針Linklistqa=pa->next;Linklistqb=pb->next;Linklistheadc,hc,qc;hc=(Linklist)malloc(sizeof(structLinklistomial));//建立頭結(jié)點(diǎn)hc->next=NULL;headc=hc;while(qa||qb){qc=(Linklist)malloc(sizeof(structLinklistomial));switch(Compare(qa,qb)){case1:{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}case0:{qc->coef=qa->coef+qb->coef;qc->expn=qa->expn;qa=qa->next;qb=qb->next;break;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第5頁。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第5頁。case-1:{qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}}if(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}elsefree(qc);//當(dāng)相加系數(shù)為0時(shí),釋放該結(jié)點(diǎn)}returnheadc;}LinklistSubtractionLinklist(LinklistSa,LinklistSb){//求解并建立多項(xiàng)式a-b,返回其頭指針LinklistCb=Sb->next;while(Cb){Cb->coef=(-1)*Cb->coef;Cb=Cb->next;}returnAddLinklist(Sa,Sb);}intmain(){intm,n,a=1;charflag;Linklistpa=0,pb=0,pc;printf("歡迎使用一元多項(xiàng)式加法器\n\n");//輸出菜單printf("*******************************************************\n");printf("*一元多項(xiàng)式簡單運(yùn)算器*\n");printf("**\n");printf("*A:輸入多項(xiàng)式aB:輸入多項(xiàng)式b*\n");printf("**\n");數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第6頁。printf("*C:輸出多項(xiàng)式a數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第6頁。printf("**\n");printf("*E:輸出a+bF:輸出a-b*\n");printf("**\n");printf("*G:使用完畢!*\n");printf("*******************************************************\n");while(a){printf("\n請選擇操作:");scanf("%c",&flag);//空格符號(hào)一定要注意switch(flag){case'A':case'a':{printf("下面進(jìn)行多項(xiàng)式a的輸入:\n");printf("請輸入a的項(xiàng)數(shù):");scanf("%d",&m);pa=CreateLinklist(pa,m);//建立多項(xiàng)式abreak;}case'B':case'b':{printf("下面進(jìn)行多項(xiàng)式b的輸入:\n");printf("請輸入b的項(xiàng)數(shù):");scanf("%d",&n);pb=CreateLinklist(pb,n);//建立多項(xiàng)式bbreak;}case'C':case'c':{printf("\n多項(xiàng)式a=");PrintLinklist(pa);break;}case'D':case'd':{printf("\n多項(xiàng)式b=");PrintLinklist(pb);break;}數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第7頁。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-一元多項(xiàng)式計(jì)算器全文共11頁,當(dāng)前為第7頁。case'e':{pc=AddLinklist(pa,pb);printf("\na+b=");PrintLinklist(pc);break;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論