1、
//#include "linklist.h"的定义
#include
using namespace std;
struct elem
{
int coef;
int exp;
};
template class linklist;
template
class node
{
friend class linklist;
template
friend ostream & operator<<(ostream & os,li
2、nklist & ll);
template
friend void addd(linklist * A,linklist *B);
T date;
node *next;
};
template
class linklist
{
template
friend ostream & operator<<(ostream & os,linklist & ll);
template
fri
3、end void addd(linklist * A,linklist * B);
private:
node *first;
public:
linklist();
linklist(T a[],int n);//形成一元多项式链表
~linklist();
};
template
ostream & operator<<(ostream & os,linklist & kk)
{
node *p;
p=kk.first->next;
while(p)
{
o
4、s<date.coef<<"X"<<"("<date.exp<<")"<<" ";
p=p->next;
}
os<
void addd(linklist * A,linklist * B)
{
node *p,*q,*pre,*qre,*v;
pre=A->first; p=pre->next; //工作指针p初始化,指针pre始终指向p的前驱结点
qre=B->first; q=qre->next;
5、 //工作指针q初始化,指针qre始终指向q的前驱结点
while(p && q)
{
if (p->date.expdate.exp)
{ //第1种情况
pre=p;
p=p->next;
}
else if (p->date.exp>q->date.exp)
{ //第2种情况,将结点q插入到结点p之前,q指针后移
v=q->next;
q->next=p;
6、 pre->next=q;
qre->next=v;
q=v;
}
else { //第3种情况
p->date.coef =p->date.coef+q->date.coef; //系数相加
if (p->date.coef ==0) { //系数为0,删除结点p和结点q
pre->next
7、p->next; //删除结点p
delete p;
p=pre->next;
}
else { //系数不为0,只删除结点q
pre=p;
p=p->next;
}
qre->next=q->next; //删除结点q
delete q;
8、 q=qre->next;
}
}
if(q) pre->next=q; //将结点q链接在第一个单链表的后面
B->first->next=NULL;
}
template linklist::linklist()
{
first=new node;
first->next=NULL;
}
template linklist::~linklist()
{
node *p=first,*q;
while(p)
{
q=p;
p=p->next
9、
delete q;
}
}
//以下是尾接法
template linklist::linklist(T a[],int n)
{
node *r; node *p;
first=new node;
first->next=NULL;
r=first;
for(int i=0;i;
p->date=a[i];
r->next=p;
r=p;}
r->next=NULL;
}
*/
//主
10、函数
//主测试函数
#include
using namespace std;
#include "linklist.h"
void main()
{
elem a[4],b[5];
linklist *P,*Q;
cout<<"输入第一个多项式的系数、指数"<>a[i].coef>>a[i].exp;
linklist l1(a,4);
cout<<"输出第一个多项式为f(X):"<>b[i].coef>>b[i].exp;
linklist l2(b,5);
cout<<"输出第二个多项式为g(X):"<