单向链表的应用:一元多项式的表示与相加——以c语言为例

it2025-03-15  24

#include <stdio.h> #include <iostream> using namespace std; typedef struct node { double coef;// 多项式系数 int exp;// 多项式指数 node* next;//指针域 }*poly; //初始化多项式 void initPoly(poly& p) { p = new node[1]; p->next = NULL; } //创建一个多项式 void createPoly(poly& p) { poly lastPtr = p;//最后一个结点为头结点 int exp; //多项式指数 double coef; 多项式系数 cout << "请输入多项式的指数:(输入的数为负数代表输入完毕)" << endl; cin >> exp; cout << "请输入多项式的系数:" << endl; cin >> coef; while (exp >= 0) { poly newItem = new node[1]; newItem->exp = exp; newItem->coef = coef; newItem->next = lastPtr->next; lastPtr->next = newItem; lastPtr = newItem; cout << "请输入多项式的指数:(输入的数为负数代表输入完毕)" << endl; cin >> exp; cout << "请输入多项式的系数:" << endl; cin >> coef; } cout << "多项式创建完毕" << endl; } //展示多项式 void displayPoly(poly p) { p = p->next; //当下一个结点不为空时 while (p) { cout << p->coef << "x^" << p->exp; //如果当前结点的下一个结点不为空时 if (p->next&&p->coef>0) { cout << "+"; } //指向下一结点 p = p->next; } } //两个多项式相加 void polyAdd(poly p1, poly p2) { poly prep1;//定义一个p1的前一个结点 prep1 = p1;//p1的前一个结点为头结点 p1 = p1->next;// p1结点指向第一个结点 p2 = p2->next;// p2结点指向第一个结点 //当p1和p2均不为空时 while (p1 && p2) { //如果p1和p2指数相同时 if (p1->exp == p2->exp) { //如果p1和 p2的系数相加不为0时 if (p1->coef + p2->coef != 0) { p1->coef += p2->coef; p1 = p1->next; p2 = p2->next; prep1 = prep1->next; } else {//如果p1和 p2的系数相加为0时 prep1->next = prep1->next->next; delete p1; p1 = prep1->next; p2 = p2->next; } } else if (p1->exp > p2->exp) {//如果p1指数大于p2的指数时 p1 = p1->next; prep1 = prep1->next; } else if (p1->exp < p2->exp) {//如果p1指数小于p2的指数时 poly temp = p2->next; p2->next = prep1->next; prep1->next = p2; p2 = temp; prep1 = prep1->next; } } //当p1为空,p2不为空时 if (p2) { prep1->next = p2; } } int main() { poly p1; poly p2; initPoly(p1); initPoly(p2); createPoly(p1); createPoly(p2); polyAdd(p1, p2); displayPoly(p1); return 1; } 在这里插入代码片

运行结果如图: 缺点:运行结果格式并不完美,待改进!!

最新回复(0)