数据结构_链表_多项式求导_C++实现

数据结构_链表_多项式求导_C++实现

head.h

#include<iostream>
#include<string>
using namespace std;

class NODE
{
public:
	NODE();
	int coef;
	int exp;
	NODE *next;
};

NODE::NODE()
{
	coef = exp = 0;
	next = NULL;
}

class DATA
{
public:
	DATA();
	void GetPoly();
	void Derivation();
	void Print();
private:
	NODE *head, *p, *pre;
	int coef, exp;
};

DATA::DATA()
{
	pre = head = p = NULL;
	coef = exp = 0;
}

void DATA::GetPoly()
{
	cout << "GetPoly Called !" << endl << endl;
	cout << "Please Input polynomial :" << endl << endl;
	bool first = true;
	while (cin >> coef >> exp)
	{
		if (first)
		{
			head = new NODE;
			head->coef = coef;
			head->exp = exp;
			p = head;
			first = !first;
		}
		else
		{
			p->next = new NODE;
			p = p->next;
			p->coef = coef;
			p->exp = exp;
		}
	}
	cin.clear();
}

void DATA::Derivation()
{
	cout << "Derivation Called !" << endl << endl;
	if (head == NULL)
	{
		cout << "No Data !" << endl << endl;
		return;
	}
	else
	{
		pre = p = head;
		while (p != NULL)
		{
			if (p->exp == 0)
			{
				if (p == head)
				{
					head = head->next;
					delete p;
					pre = p = head;
				}
				else
				{
					pre->next = p->next;
					delete p;
					p = pre->next;
				}
			}
			else
			{
				p->coef *= p->exp;
				p->exp--;
				pre = p;
				p = p->next;
			}
		}
	}
}

void DATA::Print()
{
	cout << "Print Called !" << endl << endl;
	if (head == NULL)
	{
		cout << "No Data !" << endl << endl;
		return;
	}
	p = head;
	cout << p->coef;
	if (p->exp != 0)
		cout << "x^" << p->exp;
	p = p->next;
	while (p != NULL)
	{
		cout << "+" << p->coef;
		if (p->exp != 0)
			cout << "x^" << p->exp;
		p = p->next;
	}
	cout << endl << endl << endl;
}

main.cpp

#include"head.h"
 
int main()
{
	DATA data;
	data.GetPoly();
	data.Print();
	data.Derivation();
	data.Print();
	system("pause");
	return 0;
}

发表回复