数据结构实验:一元多项式计算器
生活随笔
收集整理的這篇文章主要介紹了
数据结构实验:一元多项式计算器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、實驗內容及要求
1.任務描述:
實驗內容:
設有一元多項式Am(x)和Bn(X),編程實現多項式Am(x)和Bn(x)的加法、減法和乘法運算。其中多項式描述為:
Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm;
Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。
輸入和輸出:
(1)輸入:
- 從鍵盤輸入運算指令(相加、相減、相乘),根據運算指令進行相應運算;
- 從鍵盤輸入兩個多項式的系數和指數;
- 系數和指數采用int類型,運算結果不超出int取值范圍。
(2)輸出: - 每種運算結果以多項式形式輸出,要輸出升冪和降冪兩種情況。
- 結果多項式中無重復階項、無零系數項,輸出多項式時請采用如下易讀形式(一元多項式,總變元為x): x^4 - 3 x^2 + 5
實驗要求: - 實現一個簡單的交互式界面,包括系統菜單、輸入提示等。
- 多項式運算前首先判定多項式特點,根據多項式是否稀疏來選用合適的存儲結構;
- 根據多項式不同的運算要求選擇合適的存儲結構;
- 上機編輯、調試出完整正確的程序,包括相加、相減、相乘運算。
2.主要數據類型與變量
struct PolyNode {
int coef;
int expon;
PolyNode* link;
};
typedef PolyNode* Polynomial;
3.算法或程序模塊
讀多項式模塊:
Polynomial ReadPoly()
多項式乘法模塊:
Polynomial Mult(Polynomial p1, Polynomial p2)
多項式加法模塊:
Polynomial Add(Polynomial p1, Polynomial p2)
多項式減法模塊:
Polynomial Reduce(Polynomial p1, Polynomial p2)
輸出多項式模塊:
void PrintPoly(Polynomial p)
二、測試
1、 方案
輸入兩個多項式分別為:
3 4 -5 2 6 1 -2 0
5 20 -7 4 3 1
2、 結果
三、代碼
#include<cstdio> #include<cstdlib> using namespace std;struct PolyNode {int coef;int expon;PolyNode* link; }; typedef PolyNode* Polynomial;void Attach(int c, int e, Polynomial* prear) {PolyNode* node = new PolyNode();node->coef = c;node->expon = e;(*prear)->link = node;*prear = node; }Polynomial ReadPoly() {int c, e;Polynomial p, rear, temp;p = new PolyNode();rear = p;while(scanf("%d%d", &c, &e)){Attach(c,e,&rear);char ch = getchar(); if(ch == '\n')break;}temp = p; p = p->link; free(temp);return p; }Polynomial Mult(Polynomial p1, Polynomial p2) {if (!p1||!p2) return NULL;Polynomial p, rear, t1, t2, temp;p = new PolyNode();rear = p;t1 = p1; t2 = p2;int c, e;while (t2){c = t1->coef * t2->coef;e = t1->expon + t2->expon;Attach(c, e, &rear);t2 = t2->link;} t1 = t1->link;while (t1){t2 = p2; rear = p;while (t2){c = t1->coef * t2->coef;e = t1->expon + t2->expon;while (rear->link && rear->link->expon > e){rear = rear->link;}if (rear->link && rear->link->expon == e){if (rear->link->coef + c){rear->link->coef += c;}else{Polynomial temp = rear->link;rear->link = temp->link;free(temp);}}else{PolyNode* node = new PolyNode();node->coef = c;node->expon = e;node->link = rear->link;rear->link = node;rear = rear->link;}t2 = t2->link;}t1 = t1->link; }temp = p; p = p->link; free(temp);return p; }Polynomial Add(Polynomial p1, Polynomial p2) {Polynomial p, rear, t1, t2, temp;p = new PolyNode();rear = p;t1 = p1; t2 = p2;while (t1 && t2){if (t1->expon == t2->expon){if (t1->coef + t2->coef != 0) Attach(t1->coef + t2->coef, t1->expon, &rear);t1 = t1->link;t2 = t2->link;}else if(t1->expon > t2->expon){Attach(t1->coef, t1->expon, &rear);t1 = t1->link;}else{Attach(t2->coef, t2->expon, &rear);t2 = t2->link;}}for (; t1; t1 = t1->link) Attach(t1->coef, t1->expon, &rear);for (; t2; t2 = t2->link) Attach(t2->coef, t2->expon, &rear);temp = p; p = p->link; free(temp);return p; } Polynomial Reduce(Polynomial p1, Polynomial p2) {Polynomial p, rear, t1, t2, temp;p = new PolyNode();rear = p;t1 = p1; t2 = p2;while (t1 && t2){if (t1->expon == t2->expon){if (t1->coef - t2->coef != 0) Attach(t1->coef - t2->coef, t1->expon, &rear);t1 = t1->link;t2 = t2->link;}else if(t1->expon > t2->expon){Attach(t1->coef, t1->expon, &rear);t1 = t1->link;}else{Attach(-t2->coef, t2->expon, &rear);t2 = t2->link;}}for (; t1; t1 = t1->link) Attach(t1->coef, t1->expon, &rear);for (; t2; t2 = t2->link) Attach(-t2->coef, t2->expon, &rear);temp = p; p = p->link; free(temp);return p; } void PrintPoly(Polynomial p) {if (!p){printf("0\n");return;}int flag = 0;while (p){int a=p->coef;int b=p->expon;if (!flag) {flag = 1;if(b==0)printf("%d",a);else printf("%dx^%d",a,b);}else{if(a>0){if(b==0) printf("+%d",a);else if(b==1) printf("+%dx",a);else printf("+%dx^%d", a, b);} else {if(b==0) printf("%d",a);else if(b==1) printf("%dx",a);else printf("%dx^%d", a, b);}}p = p->link;}printf("\n"); }int main() {Polynomial p1, p2, pm, ps,pr;p1 = ReadPoly();p2 = ReadPoly();pm = Mult(p1, p2);PrintPoly(pm);ps = Add(p1, p2);PrintPoly(ps);pr=Reduce(p1,p2);PrintPoly(pr); }總結
以上是生活随笔為你收集整理的数据结构实验:一元多项式计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle执行计划的概念,SQL语句性
- 下一篇: lte核心网由哪些设备组成_电气设备安装