大數據結構_實驗一_一元多項式相加_第1頁
大數據結構_實驗一_一元多項式相加_第2頁
大數據結構_實驗一_一元多項式相加_第3頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據結構實驗報告實驗一:一元多項式相加姓名:周成學號: 13083511專業:軟件工程任課教師:馬慧珠2013年12月01日1. 實驗名稱:一元多項式相加2. 實驗目的:如何使用C語言實現鏈表的說明、創建以及結點的插入和刪除等操作。3. 實驗要求:對一元多項式能實現輸入、輸出,以及兩個一元多項式相加及結果顯示。4. 實驗容:一元多項式的表示在計算機用鏈表來實現,同時為了節省存儲空間, 只存儲其中非零的項,鏈表中的每個節點存放多項式的系數非零項。它包含 三個域,分別存放多項式的系數,指數,以及指向下一個項的指針。根據一 元多項式相加的運算規則:對于兩個一元多項式中所有指數相同的項,對應 系數相加

2、,若其和不為零,則構成“和多項式”中的一項,對于兩個一元多 項式中所有指數不相同的項,則分別復抄到“和多項式”中去。核心算法PolyAdd是把分別由pa和pb所指的兩個多項式相加,結果為 pa所指的多項式。運算規則如下:相加時,首先設兩個指針變量qa和qb分別從多項式的首項開始掃描,比較 qa和qb所指結點指數域的值,可能出 現下列三種情況之一:(1) qa->exp大于qb->exp,則qa繼續向后掃描。(2) qa->exp等于qb->exp,則將其系數相加。若相加結果不為零,將結果 放入qa->coef中,并刪除qb所指結點,否則同時刪除qa和qb所指結點。

3、 然后qa、qb繼續向后掃描。(3) qa->exp小于qb->exp,則將qb所指結點插入qa所指結點之前,然 后qa、qb繼續向后掃描。掃描過程一直進行到qa或qb有一個為空為止,然后將有剩余結點的鏈 表接在結果表上。所得pa指向的鏈表即為兩個多項式之和。5. 實驗程序代碼及運行結果:#i nclude"stdafx.h"#i nclude<stdio.h>#i nclude<stdlib.h>#i nclude<malloc.h>#i nclude<stdio.h>#defi neNULL 0typedefs

4、truct NODEfloatcoef;/系| i數o yintexp n;/指?數o ystructNODE *n ext;NODE;NODE *Creat( int n);void print(NODE *head);NODE *AddPoly n(N ODE *head1, NODE *head2);NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare( int a, int b);/*創? ? ?建? §鏈C? ?表aa */NODE *Creat( int

5、n)NODE *curre nt, *previous, *head;int i;head = (NODE *)malloc( sizeof (NODE); /* 創? ? ?建? §頭a ? O結C 點 i ?*/ previous = head;for (i = 0; i < n; i+)current = (NODE *)malloc( sizeof (NODE);printf("請?輸o ?入?系| 數o y和a指?數o y :");sca nf("%f%d", &curre nt->coef, &curre

6、 nt->exp n);previous->n ext = curre nt;previous = curre nt;previous->n ext = NULL;return head; /* 一° ?元8多0項?式。?的i ?想?加? , e ?總d - 1體?考?慮?, e ?可|分O ?qa的i ?指 ? 數o y比a "" qb小 ?,e ?或八 等i 于? - 2 pb(如?果 ?系| i數o y相加?等i 于? - 2 0和a不?等i 于? - 2 0),或八大? - ?于? - 2 pb里O ?面 ?由?丨In sertBefor

7、e 和a Delfirst 兩C ?個?小?模? e塊r 組d - |成r 一° ?部? 分O ?*/NODE *AddPoly n(N ODE *head1, NODE *head2) NODE *ha, *hb, *qa, *qb;int a, b; float sum;ha = head1;/*ha和a hb指?向八頭a ? O結C點?*/hb = head2;qa = ha->n ext;結C點i ?*/qb = hb->n ext;while (qa && qb)/*qa和a qb均非O?空?*/*qa和a qb指?向八頭a ? O結C點?的i

8、?下?一° ?個?a = qa->exp n; b = qb->exp n;switch (compare(a, b) /*qa->exp n < qb_>exp n*/case -1 :ha = qa;qa = qa->n ext;break;case 0 :sum = qa->coef + qb->coef; if (sum != 0.0) qa->coef = sum;/*系| i數o y的i ?和a */* 如?果 ?不?是o ?0.0*/*改?變a ?系|i數o y*/ha = qa; elsefree(Delfirst

9、(ha, qa); free(Delfirst(hb, qb); qa = ha->n ext;qb = hb->n ext;break;/*qb釋o - a放O?后?要° a重?新?賦3值| i */case 1 :Delfirst(hb, qb);In sertBefore(ha, qb);? ? */qb = hb->n ext;ha = ha->n ext;break;if (qb)ha->n ext = qb;free(head2);/* 如?果 ?qa-> expn > qb -> expn*/*把? ?qb插?入?到i ?

10、ha下?一° ?個 ?結0點i ?之?前/*插?入?剩o ? e余?的i ?pb*/retur n head1;/* 比 a ""較?*/int compare( int a, int b) if (a < b)return -1;else if (a > b)return 1;elsereturn 0;/*刪| ?除丫結0點i ?q*/NODE *Delfirst(NODE *p1, NODE *q)p1 -> n ext = q -> n ext;return (q);/*插?入?結0點i ?,弓1° y入?結0點i ?p,可

11、 |以° ?讓?卩插?入?到i ?p2和a p1之? 間?*/void InsertBefore(NODE *p1, NODE *p2)NODE *p;p = p1- >n ext;p1- >n ext = p2;p2->n ext = p;/*打?印? ?,為a了 0 ?美一0觀?程?序八分O ?開a打?印? ?*/void print(NODE *head)NODE *curre nt;curre nt = head->n ext;while (current->next != NULL)prin tf("%0.f * xA%d + &qu

12、ot;, curre nt->coef, curre nt->exp n);curre nt = curre nt -> n ext;printf( "%0.f * xA%d" , curre nt->coef, curre nt->exp n);/system (e ? § "pause");int main()NODE *head1, *head2, *head3;int n1, n2;printf("請?輸o?入?你?需要°a的?多_0項?式0?的?項?數0y n1 :");sc

13、a nf( "%d", &n 1);headl = Creat( n1);printf("第2 一° ?個 ?多項?式0 ?的 i ?顯?示o ? : n");prin t(head1);printf( "n請?輸o ?入?你?需要° a的i ?多_0項?式0 ?的i ?項?數oyn2 :");sca nf( "%d", &n 2);head2 = Creat( n2);printf( "n第i2二t個?多項?式。?的i ?顯?示o ? : n");prin

14、t(head2);head3 = AddPoly n( headl, head2);printf( "n合?并? e后?的i ?多_0項?式o ?的i ?顯?示o ? : n");prin t(head3);printf( "n");.下載可編輯.運行結果:實驗數據1如圖:輸入一個四次二項式 XA3+2XA4, 個五次二項式 XA4+2XA5, 輸出如圖:nl至冃青壬冃 丄 4心"l't式Z要和和d黎系 入入入個亡入入入 王冃K 土H狷蛾=A 3WJ 2 4 的見于s* xA4的釜項武的項數 Z:L + F卻刁桂序L7L蕩4£

15、壬加止小四兀多遲竺也竺閑個姦頂式的顯示:|臺第論芬庶鑫示=*3 * xa4 + 2 w實驗數據2如圖:輸入一個五次四項式 XA2+XA3+XA4+XA5還有一個五次五項式1+X+XA3+2XA4+2XA5t 出如圖所示血 匚“WindowsVsvst亡rm弓K cmd.e<e Q U 口口 壽數數數數 AAAAA.XAAAAAA 號祁輔藍一需揄斗聶黔 墾墾冃肓青第L青圭墾冃土冃主星冃 b-l-l-rlFTJJEb 1數M 2 3 4式11丄求-式項下3項dr饕數數 囪匕 QuamJ 口肉.J-L-R:匕H1I旦mH 臼左'?!; 一門日打 & 孑7'-才、一-r'J_u n I*頂fi0 1 3 4 S1112 2nl4 +n2二個多項式的顯示=* XA0 4- 1 * 5CA± + 1 *+合并后的多項式的顯示=* xA0 + 1 *+ 1 * x2 +請按任意wm-實驗數據3如圖:輸入一個七次三項式 1+2xA5+3XA7 ,還有一個五次四項式 1+2XA2+3XA4+4XA5, 輸出如圖:砂 C;Wi ndowsVsysterTi 3 Z'kcnnd. exe主冃冃土 0E士冃碧 土冃士冃土冃主同士冃¥和刃.和, 入兒人'A-'X人人入u-u數數數顯6.實驗總結本來我對編程很沒有信心

溫馨提示

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

評論

0/150

提交評論