现在我把我的整个代码发上去,现在的问题是,我的内存不能读~~~
#include<iostream>
using namespace std;
typedef struct{
float coef;//系数
int exp;//指数
}number;
typedef struct Lnode{
number data;
Lnode *next;
}*Link;
typedef struct{
Link head;
int len;
}Linklist;
Link makeNode(Link p,number &e)//分配由P指向E的结点
{
p=new Lnode;
if(p==0)
exit(1);
else
{
p->data=e;
p->next=0;
return p;
}
}
void insFirst(Link &h,Link &s)//已知H指向表的头结点,将S所指结点插入第一个结点之前
{
s->next=h->next;
h->next=s;
}
Link getHead(Linklist &L)
{
return L.head;
}
Link nextPos(Linklist &L,Link &p)//返回P的后继结点的位置,若无后继,则返回0
{
if(p->next==0)
return 0;
else
return p->next;
}
void delFirst(Link h,Link&p)//已知H指向表的头结点,删除表中的第一个结点并以Q返回
{
p=h->next;
h->next=h->next->next;
}
number getCurElem(Link p)//P指向表中的一个结点,返回P所指的结点的数据元素
{
return p->data;
}
void creatPloyn(Linklist &L,int m)//输入M项的系数和指数,建立一元多项式
{
L.head=new Lnode;if(L.head==0)exit(1);Link s;
Link h=L.head;
number e;
e.coef=0.0;e.exp=-1;
h->data=e;h->next=0;
for(int i=1;i<=m;i++)
{
cout<<"请输入第"<<i<<"项的系数:";
cin>>e.coef;
cout<<"请输入第"<<i<<"项的指数:";
cin>>e.exp;
cout<<endl;
s=makeNode(s,e);
insFirst(h,s);
}
}
int listEmpty(Linklist &L)//判断表是不是为空
{
if(L.head->next==0)
return 1;
else
return 0;
}
void append(Linklist &L,Link *s)
{
Link p;
p=L.head;
if(p->next==0)
p=(*s);
else
{
while(p->next!=0)
{p=p->next;}
p->next=(*s);
}
}
int compare(number a,number b)
{
if(a.exp>b.exp)
return 1;
else if(a.exp=b.exp)
return 0;
else if(a.exp<b.exp)
return -1;
}
void printPloyn(Linklist &L)
{
Link p;
if(L.head==0)
return;
else
{
p=(L.head)->next;
while(p!=0)
{
while(p->next!=0)
{
cout<<(p->data).coef<<"x^"<<(p->data).exp<<"+";
p=p->next;
}
cout<<(p->data).coef<<"x^"<<(p->data).exp<<endl;
p=p->next;
}
}
}
void addPloyn(Linklist &La,Linklist &Lb,Linklist &Lc)
{
Link ha,hb,pa,pb,p;
number a,b,c;float sum;
Lc.head=new Lnode;
if(Lc.head==0)exit(1);
Lc.head->next=0;
ha=getHead(La);hb=getHead(Lb);
pa=nextPos(La,ha);pb=nextPos(Lb,hb);
while(listEmpty(La)&&listEmpty(Lb))
{
a=pa->data;b=pb->data;
switch(compare(a,b))
{
case -1:
c=a;
p=makeNode(p,c);append(Lc,&p);pa=nextPos(La,pa);
break;
case 0:
sum=a.coef+b.coef;
if(sum!=0.0)
{
c.coef=sum;c.exp=a.exp;
p=makeNode(p,c);append(Lc,&p);
pa=nextPos(La,pa);pb=nextPos(Lb,pb);
break;
}
else
{
pa=nextPos(La,pa);pb=nextPos(Lb,pb);
break;
}
case 1:
c=b;
p=makeNode(p,c);append(Lc,&p);pb=nextPos(Lb,pb);
break;
}
}
if(pa==0)
{
while(pb!=0)
{
c=pb->data;
p=makeNode(p,c);append(Lc,&p);pb=nextPos(Lb,pb);
}
}
else
{
while(pa!=0)
{
c=pa->data;
p=makeNode(p,c);append(Lc,&p);pa=nextPos(La,pa);
}
}
}
int main()
{
Linklist La,Lb,Lc;
int a,b;
cout<<"请输入第一个多项式的项数:";
cin>>a;
cout<<"请输入第二个多项式的项数:";
cin>>b;
cout<<endl;
cout<<"现在为您创建第一个多项式如下:"<<endl;
creatPloyn(La,a);
printPloyn(La);
cout<<endl;
cout<<"现在为您创建第二个多项式如下:"<<endl;
creatPloyn(Lb,b);
printPloyn(Lb);
cout<<"两个多项式的和是:"<<endl;
addPloyn(La,Lb,Lc);
printPloyn(Lc);
return 0;
}