请问·如何·在不修改函数声明时修改·单链表怎么在主函数中调用多项式相乘的代码?

提示:一元多项式中的数据项含有两个数据分别是系数与指数,为了简单起见,系数与指数都为整数。定义单链表的数据结构和结点的数据结构。
#include <iostream.h>
typedef struct
{
int xi;//系数
int zhi;//指数
}unit;
typedef struct LNode
{
unit data; //结点的数据部分
struct LNode *next;
} LinkList;
1.初始化单链表//初始化链表
void InitList(LinkList *&L)
{
L = new LinkList;
L->next = NULL;
}2.插入结点到有序单链表中根据指数的大小,从大到小进行插入void InsertList(LinkList *&L,unit e)
{
LinkList *r,*s;//r是循环用的结点指针,s是插入的新结点
r = L;
//寻找新插入结点的位置
while(r->next!=NULL && e.zhi < r->next->data.zhi)//以指数决定插入的位置
r = r->next;
if(r->next != NULL && e.zhi == r->next->data.zhi)//指数相等
r->next->data.xi += e.xi;
//系数相加
else
{
s = new LinkList;
s->data.xi = e.xi; s->data.zhi = e.zhi;
//将e的值赋给s指针所指结点
s->next = r->next;
r->next = s;
}
}3.遍历单链表一元多项式存在多种特殊情况第一种特殊情况:系数为1,指数为0,只输出1。第二种特殊情况:指数为1时,输出‘X’。//遍历线性表
void DispList(LinkList *L)
{
LinkList *p = L->next;
int j = 0;
while(p)
{
if(p->data.xi == 1 && p->data.zhi == 0)//系数为1,指数为0
cout<<"1";
if(p->data.xi != 0 && p->data.xi != 1)
cout<<p->data.xi;
if(p->data.xi != 0)
{
if(p->data.zhi > 1)
cout<<"X^"<<p->data.zhi;
else if(p->data.zhi < 0)
cout<<"X^("<<p->data.zhi<<')';
else
if(p->data.zhi == 1)
cout<<'X';
}
if(p->next != NULL && p->next->data.xi > 0)
cout<<'+';
p = p->next;
}
cout<<endl;
}4.两个多项式相加在单链表L的基础上,进行相加。//两个多项式相加
void AddList(LinkList *&L,LinkList *Lc)
{
LinkList *b = Lc->next;
while(b != NULL)
{
InsertList(L,b->data);//从Lc表中取出每一个节点插入到L中
b = b->next;
}
}5.两个多项式相乘单链表Lc的一个项的系数和指数需要乘以单链表Lb的所有项,将相乘得到的数据存入一个新表La,之后再由单链表Lc的下一个项进行操作。void Cheng(LinkList *&La,LinkList *&Lb,LinkList *Lc)
{
LinkList *b,*c = Lc->next;
unit e;
while(c != NULL)
//取Lc表中的每一个节点
{
b = Lb->next;
while(b != NULL)
//取Lb表中的每一个节点
{
e.xi = c->data.xi * b->data.xi;
//系数相乘
e.zhi = c->data.zhi + b->data.zhi;
//指数相加,得到节点相乘的值
InsertList(La,e);
//再将该节点插入到La中
b = b->next;
}
c = c->next;
}
}=================================================主函数因为要生成有两个多项式,所以外循环 while 代表多项式的个数。void main()
{
LinkList *La,*Lb,*L;
InitList(La);InitList(Lb);InitList(L);
int i,j = 0;
unit k;
while(j++ < 2)
{
i = 0;
do
{
cout<<"请输入第"<<j<<"个多项式第"<<++i<<"项的系数(按0退出):";
cin>>k.xi;
cout<<"请输入第"<<j<<"个多项式第"<<i<<"项的指数:";
cin>>k.zhi;
cout<<endl;
if(j == 1)
if(k.xi != 0)
InsertList(La,k);
if(j == 2)
if(k.xi != 0)
InsertList(Lb,k);
}while(k.xi != 0);
}
cout<<"第一个一元多项式为:F(X)=";DispList(La);
cout<<"第二个一元多项式为:G(X)=";DispList(Lb);
cout<<"多项式相乘为:";
Cheng(L,La,Lb);
DispList(L);
cout<<"多项式相加为:";
AddList(La,Lb);
DispList(La);
}}

我要回帖

更多关于 单链表怎么在主函数中调用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信