Member 13455005 Ответов: 1

Как добавить два полинома с помощью связанных списков и сохранить ответ в третьем списке


До сих пор я пытался создать функцию, которая проверяет, равны ли два элемента из любого списка, а затем добавляет их, но она не работает, и я не знаю, как вставить большие элементы и меньшие соответственно
Предположим, я даю следующий ввод


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

Покажите пример входных данных, ожидаемый выход и фактический выход. или объясните, почему это не работает.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы уже разместили это по адресу Добавление двух полиномов с помощью связанного списка[^Пожалуйста, не повторяйте один и тот же вопрос.