1. 程式人生 > >【資料結構】1-3 多項式相加

【資料結構】1-3 多項式相加

其實這個還是有點問題的,在偶見情況下會打印出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; }