Как добавить два полинома с помощью связанных списков и сохранить ответ в третьем списке
До сих пор я пытался создать функцию, которая проверяет, равны ли два элемента из любого списка, а затем добавляет их, но она не работает, и я не знаю, как вставить большие элементы и меньшие соответственно
Предположим, я даю следующий ввод
3x^2+4x^3+21x^1
и
54x^3+5x^1
тогда ответ должен быть
58x^3+26x^1+3x^2
но программа не добавляет списки правильно, и я понятия не имею, как просто отобразить, когда один член списка больше или меньше соответствующего списка
Что я уже пробовал:
<pre lang="c++">
#include<iostream> using namespace std; class node{ private: int coeff; int exp; node *next; public: void set(int coeff,int exp) { this->coeff=coeff; this->exp=exp; } node *getnext() { return next; } void setnext(node *next) { this->next=next; } int coef() { return coeff; } int e() { return exp; } }; class list{ private: node *head; node *current; int size; public: list() { head=new node(); head->setnext(NULL); current=NULL; size=0; } void create() { int co,ex; node *newnode=new node(); cout<<"Enter coefficient :"; cin>>co; cout<<"Enter exponent :"; cin>>ex; newnode->set(co,ex); if(current!=NULL) { newnode->setnext(current->getnext()); current->setnext(newnode); current=newnode; } else { newnode->setnext(NULL); head->setnext(newnode); current=newnode; } size++; } int coef() { return current->coef(); } int e() { return current->e(); } node *cur() { return current; } int length() { return size; } void start() { current=head->getnext(); } void next() { current=current->getnext(); } void display() { if(current!=NULL) { cout<<current->coef()<<"x^"<<current->e(); } } void equal(list li2) { int sum; list li3; start(); li2.start(); int n1=length(); int n2=li2.length(); for(int i=1;i<=n1;i++) { for(int j=1;j<=n2;j++) { if(e()==li2.e()) { sum=coef()+li2.coef(); li3.add(sum,e()); break; } li2.next(); } next(); } start(); li2.start(); for(int i=1;i<=n2;i++) { for(int j=1;j<=n1;j++) { if(li2.e()==e()) { sum=coef()+li2.coef(); li3.add(sum,li2.e()); break; } next(); } li2.next(); } } void add(int co,int e) { node *newnode=new node(); newnode->set(co,e); if(current!=NULL) { newnode->setnext(current->getnext()); current->setnext(newnode); current=newnode; } else { newnode->setnext(NULL); head->setnext(newnode); current=newnode; } size++; } }; int main() { list l1,l2,l3; int n1,n2; cout<<"Enter number of terms you want to enter in first polynomial :"; cin>>n1; for(int i=1;i<=n1;i++) { l1.create(); } cout<<"Enter number of terms you want to enter in second polynomial :"; cin>>n2; for(int j=1;j<=n2;j++) { l2.create(); } n1=l1.length(); n2=l2.length(); l1.start(); l2.start(); for(int i=1;i<=n1;i++) { l1.display(); if(i<n1) { cout<<"+"; } l1.next(); } cout<<endl; for(int i=1;i<=n2;i++) { l2.display(); if(i<n2) { cout<<"+"; } l2.next(); } l1.start(); l2.start(); while(l1.cur()!=NULL && l2.cur()!=NULL) { l1.equal(l2); } cout<<endl; int n3=l3.length(); l3.start(); for(int i=1;i<=n3;i++) { l3.display(); if(i<n3) { cout<<"+"; } l3.next(); } return 0; }
Patrice T
Покажите пример входных данных, ожидаемый выход и фактический выход. или объясните, почему это не работает.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.