【資料結構】1-3 多項式相加
阿新 • • 發佈:2018-11-19
其實這個還是有點問題的,在偶見情況下會打印出0*x,目前無解唔。。。
原理就是借用線性表,然後做運算直接先插入到後面。
然後遍歷一下,只要指數相同就合併在前面一個裡面,後面的歸0(不刪除)。
列印的時候加一個判斷是否為0的條件就行了。
下面是原始碼:
#include<iostream> #include<cstring> using namespace std; struct Node { double coe;//係數 int index;//指數 Node *link; }; class polynomial { private: Node*head, *tail; //定義頭指標,尾指標 public: polynomial();//無參建構函式 polynomial(double a[], int n[], int number); //有參建構函式 ~polynomial(); //解構函式 void setup(); //求值函式 void add(double a[], int n[], int number); void subtract(double a[], int n[], int number); void print(); }; polynomial::polynomial() { head= NULL; tail = NULL; } polynomial::polynomial(double a[], int n[], int number) { head = new Node; head->index = 0; head->coe = 0; tail = head; for (int i = 0; i < number; i++) { Node *p = new Node; p->coe = a[i]; //儲存係數 p->index = n[i]; //儲存指數 p->link = NULL; tail->link = p; tail = p; } setup(); } polynomial::~polynomial() { if (head != NULL) { head = tail = NULL; } } void polynomial::add(double a[], int n[], int number) { for (int i = 0; i < number; i++) { Node *add = new Node; add->coe = a[i]; add->index = n[i]; tail->link = add; tail = add; } tail->link = NULL; setup(); } void polynomial::subtract(double a[], int n[], int number) { for (int i = 0; i < number; i++) { Node *add = new Node; add->coe = -a[i]; add->index = n[i]; tail->link = add; tail = add; } tail->link = NULL; setup(); } void polynomial::setup() { Node *m = head->link; Node *p; while (m != NULL) { p = m->link; while (p != NULL) { if (m->index == p->index) { m->coe = m->coe + p->coe; p->coe = 0; } p = p->link; } m = m->link; } tail->link = NULL; } void polynomial::print() { if (head == NULL) { cout << "錯誤,無資料!" << endl; exit(1); } Node *p = head; while (p != NULL) { p = p->link; if (p == NULL) { cout << endl; break; } if (p->coe == 0) { continue; } else { cout << p->coe << "x^" << p->index; if (p->link!= NULL&&p->link->coe>0) { cout << "+"; } } } } int main() { int number; int *index; double *coe; cout << "歡迎使用多項式計算器,請輸入多項式的元素個數:" << endl; cin >> number; index = new int[number]; coe = new double[number]; for (int i = 0; i < number; i++) { cout << "請輸入第" << i + 1 << "個多項式的係數: "; cin >>coe[i]; cout << "請輸入第" << i + 1 << "個多項式的指數: "; cin >> index[i]; } polynomial test1(coe, index, number); test1.print(); cout << "請輸入相加的多項式的元素個數:" << endl; cin >> number; delete []index; delete []coe; index = new int[number]; coe = new double[number]; for (int i = 0; i < number; i++) { cout << "請輸入第" << i + 1 << "個多項式的係數: "; cin >> coe[i]; cout << "請輸入第" << i + 1 << "個多項式的指數: "; cin >> index[i]; } test1.add(coe, index, number); cout << "相加成功!" << endl; test1.print(); cout << "請輸入相減的多項式的元素個數:" << endl; cin >> number; delete[]index; delete[]coe; index = new int[number]; coe = new double[number]; for (int i = 0; i < number; i++) { cout << "請輸入第" << i + 1 << "個多項式的係數: "; cin >> coe[i]; cout << "請輸入第" << i + 1 << "個多項式的指數: "; cin >> index[i]; } test1.subtract(coe, index, number); cout << "相減成功!" << endl; test1.print(); system("pause"); return 0; }