利用单链表对一元多项式进行创建、相加等操作
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct pNode{
int coef; //系数域
int exp; //指数域
struct pNode* link; //定义结点指针的另一种写法
}PNode;
typedef struct polynominal{
PNode *head;
}Polynominal;
void Create(Polynominal *p);
Status Output(Polynominal *p);
void Destroy(Polynominal *p);
void Add(Polynominal *px,Polynominal *qx);
void main()
{
Polynominal px,qx ;
Create(&px);
Create(&qx);
printf("the polynominal px is:");
Output(&px);
printf("\nthe polynominal qx is:");
Output(&qx);
Add(&px,&qx);
printf("\nthe added polynominal is:");
Output(&qx);
Destroy(&px);
Destroy(&qx);
}
void Create(Polynominal *p)
{
PNode *pn,*pre,*q;
p->head=(PNode*)malloc(sizeof(PNode));
p->head->exp=-1;
p->head->link=p->head;
for(;;) //无限循环语句,直到遇到break退出循环
{
pn=(PNode*)malloc(sizeof(PNode));
printf("coef:\n");
scanf("%d",&pn->coef);
printf("exp:\n");
scanf("%d",&pn->exp);
if(pn->exp<0)
{
break;
}
pre=p->head;
q=p->head->link;
while(q&&q->exp>pn->exp)
{
pre=q;
q=q->link;
}
pn->link=q;
pre->link=pn;
}
}
Status Output(Polynominal *p)
{
PNode *q;
if(!p->head->link) //判断多项式是否为空
return ERROR;
q=p->head->link;
printf("%d*x^%d",q->coef,q->exp);
q=q->link;
while(q)
{
if(q->exp==0) //常数项
{
if(q->exp>0)
{
printf("+%d",q->coef);
}
else
{
printf("%d",q->coef);
}
}
else if(q->coef>0) //非常数项系数大于0
{
printf("+%d*x^%d",q->coef,q->exp);
}
else //非常数项系数小于0
{
printf("%d*x^%d",q->coef,q->exp);
}
q=q->link;
}
}
void Destroy(Polynominal *p)
{
运行后输入一元多项式各系数和次数后出现无限乱码
对所有循环都检查过了,没有大括号的遗漏
问题出在哪里呢