数据结构:一元多项式的加减,求助啊,来高手
为什么编译连接都没错,但是运行就崩溃啊以下是我的代码
头文件#include<stdio.h>
#include<malloc.h>
typedef struct LNode //定义单链表
{
float xishu; //系数
int zhishu; //指数
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L);
void CreatPolyn(LinkList &L);
void DispPolyn(LinkList L);
void Polyn(LinkList &pa,LinkList &pb);
单链表实现#include"linklist.h"
void InitList(LinkList &L) //定义一个空表
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return ;
}
void CreatPolyn(LinkList &L) //用单链表定义一个多项式
{
int m;
LinkList q,p;
InitList(L);
q=L;
printf("输入项数\n");
scanf("%d",&m);
printf("按降幂输入系数和指数\n");
for(int i=0;i<m;i++)
{
p=(LinkList)malloc(sizeof(LNode)); //生成新结点
scanf("%f%d",p->xishu,p->zhishu);
p->next=NULL;
q->next=p;
q=p;
}
return ;
}
void DispPolyn(LinkList L) //显示输入的多项式
{
LinkList p;
p=L->next;
printf("Mul Ploy L is: \n");
while(p)
{
if(p->xishu>0) //如果系数大于0则加上+号
printf("+%fX^%d",p->xishu,p->zhishu);
else printf(" %fX^&d",p->xishu,p->zhishu);
p=p->next;
}
return ;
}
extern void Polyn(LinkList &pa,LinkList &pb)
{
LNode *p,*q,*pre,*temp;
int sum,t;
CreatPolyn(pa);
DispPolyn(pa);
CreatPolyn(pb);
DispPolyn(pb);
p=pa->next; //p指向pa头结点
q=pb->next; //q指向qa头结点
pre=pa; //用来记录合成的多项式
printf("选择要执行的操作:1,加法运算2,减法运算:");
scanf("%d",&t);
if(t==1)
{
while(p!=NULL&&q!=NULL) //当两个多项式都为完时
{
if(p->zhishu<q->zhishu) //如果q大于p的指数把q项存入
{
pre->next=q;
pre=pre->next;
q=q->next;
}
else if(p->zhishu==q->zhishu) //如果q等于p的指数把q项q项和存入
{
sum=p->xishu+q->xishu;
if(sum!=0)//如果和不为0
{
p->xishu=sum;
pre->next=p;
pre=pre->next;
p=p->next;
temp=q;
q=q->next;
free(temp);//释放temp
}
else //如果和为0
{
temp=p->next;
free(p);//释放p
p=temp;
temp=q->next;
free(q); //释放q
q=temp;
}
}
else //如果p大于q的指数把p项存入
{
pre->next=p;
pre=pre->next;
p=p->next;
}
}
if(p!=NULL) //如果p为完q完,则p接入
pre->next=p;
else //如果q为完p完,则q接入
pre->next=q;
printf("计算结果为");
DispPolyn(pa);
}
else if(t==2)
{
while(p!=NULL&&q!=NULL) //当两个多项式都为完时
{
if(p->zhishu<q->zhishu) //如果q大于p的指数把-q项存入
{
q->xishu=-q->xishu;
pre->next=q;
pre=pre->next;
q=q->next;
}
else if(p->zhishu==q->zhishu) //如果q等于p的指数把q项q项和存入
{
sum=p->xishu-q->xishu;
if(sum!=0)//如果和不为0
{
p->xishu=sum;
pre->next=p;
pre=pre->next;
p=p->next;
temp=q;
q=q->next;
free(temp); //释放temp
}
else //如果和为0
{
temp=p->next;
free(p); //释放p
p=temp;
temp=q->next;
free(q); //释放q
q=temp;
}
}
else //如果p大于q的指数把p项存入
{
pre->next=p;
pre=pre->next;
p=p->next;
}
}
if(p!=NULL) //如果p为空q空,则p接入
pre->next=p;
else //如果q为空p空,则-q接入
{
pre->next=q;
while(q!=NULL)
{
q->xishu=-q->xishu;
q=q->next;
}
}
printf("计算结果为");
DispPolyn(pa);
}
}
主函数
#include"linklist.h"
void main()
{
printf(" *****************欢迎来到一元多项式计算程序*************** \n");
LNode *L1,*L2;
Polyn(L1,L2);
}