数据结构_链表_多项式求导_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;
}