采用单向链表实现一元多项式的存储并,实现两个多项式相加,输出结果。
输入说明:
4(请输入第一个一元多项式的项数)
2,2 3,3 5,5 7,7(请输入第一个一元多项式的系数和指数)
5(请输入第二个一元多项式的项数)
-2,2 2,3 4,4 5,7 9,9(请输入第二个一元多项式的系数和指数)
输出:
5*x^3 4*x^4 5*x^5 12*x^7 9*x^9
#include <iostream>
using namespace std;
typedef struct list
{
int coe; // 系数
int index; // 指数
struct list * pNext;
} List, *pList;
pList CreatHeadNode ();
pList CreatNewNode ();
void BuildList (pList);
void PrintList (pList);
void AddList (pList, pList);
int main ()
{
pList pHeada = CreatHeadNode ();
BuildList (pHeada);
// PrintList (pHeada);
pList pHeadb = CreatHeadNode ();
BuildList (pHeadb);
// PrintList (pHeadb);
AddList (pHeada, pHeadb);
PrintList (pHeada);
}
pList CreatHeadNode ()
{
pList pNewNode = new List;
pNewNode->coe = 0;
pNewNode->index = 0;
pNewNode->pNext = NULL;
return pNewNode;
}
pList CreatNewNode ()
{
char sep;
pList pNewNode = new List;
cin >> pNewNode->coe >> sep >> pNewNode->index;
pNewNode->pNext = NULL;
return pNewNode;
}
void BuildList (pList pHead)
{
pList pTail = pHead;
int n;
cin >> n;
for (int i = 0; i < n; ++i)
{
pList pNewNode = CreatNewNode ();
pTail->pNext = pNewNode;
pTail = pNewNode;
}
}
void PrintList (pList pHead)
{
pList p = pHead->pNext;
while (p)
{
if (p->coe != 0)
cout << p->coe << "*x^" << p->index << " ";
p = p->pNext;
}
cout << "\n";
}
void AddList (pList pHeada, pList pHeadb)
{
pList a = pHeada;
pList b = pHeadb->pNext;
while (a->pNext && b)
{
if (a->pNext->index == b->index)
{
a->pNext->coe += b->coe;
a = a->pNext;
b = b->pNext;
}
else if (a->pNext->index < b->index)
a = a->pNext;
else // a->pNext->index > b->index
{
pList p = b->pNext;
b->pNext = a->pNext;
a->pNext = b;
a = a->pNext;
b = p;
}
}
if (b && a->pNext == NULL)
a->pNext = b;
}