关于数据结构中单链表的操作,改了之后一运行就出错误啊
采用用单链表表示的一元多项式,实现两个一元多项式相加功能。实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。#include<stdio.h>#include<malloc.h>
struct node//结点
{ int coef; int exp; node *next;};
typedef struct node polynode;
polynode *a,*b;
polynode *polycreate()//函数:建立单链表
{ polynode *head,*rear,*s;
int c,e;
head=(polynode * )malloc(sizeof(polynode)); /*建立多项式的头结点*/
rear=head; /*rear始终指向单链表的尾,便于尾插法建表*/
printf("输入未知数的系数,指数");
scanf("%d,%d",&c,&e);
while(c!=0) /*若c=0,则代表多项式的输入结束*/
{ s=(polynode * )malloc(sizeof(polynode)); /*申请新的结点*/
s->coef=c;
s->exp=e;
rear->next=s; /*在当前表尾做插入*/
rear=s;
printf("输入未知数的系数,指数");
scanf("%d,%d",&c,&e);}
rear->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/
return(head);}
/*int initiate(polynode **head)
{if ((*head=(polynode*)malloc(sizeof(polynode))) ==NULL)
return 0;
(*head) ->next=NULL;
return 1;}*/
polynode *initiate(polynode*head)
{if((head=(polynode*)malloc(sizeof(polynode)))==NULL)
return (0);
head->next=NULL;
return (head)}
void polyadd(polynode *polya, polynode *polyb)//函数:
/*将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式polyb删除*/
{ polynode *p,*q,*tail,*temp;
int sum;
p=polya->next; /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
q=polyb->next;
tail=polya; /*tail指向和多项式的尾结点*/
/*初始化*/
while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时*/
{ if(p->exp< q->exp)
/*规则(1):如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/
{ tail->next=p;tail=p;p=p->next;}
else if(p->exp==q->exp) /*规则(2):若指数相等,则相应的系数相加*/
{
sum=p->coef+q->coef;
if(sum!=0) /*若系数和非零,则系数和置入结点p,释放结点q,并将指针后移*/
{ p->coef=sum;
tail->next=p ; tail=p;
p=p->next;
temp=q;q=q->next;free(temp);
}
else /*若系数和为0,则删除结点p与q,并将指针指向下一个结点*/
{ temp=p;p=p->next;free(temp);
temp=q;q=q->next;free(temp);
}
}
else /*规则(3):将q结点加入到"和多项式中"*/
{ tail->next=q; tail=q;
q=q->next;}
}
if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
tail->next=p;
else /*否则,将B中的结点加入到和多项式中*/
tail->next=q;
}
void print(polynode *h )//函数:显示输出单链表中的所有结点。
{ polynode *p;
p=h;
printf("y=");
while(p->next!=NULL)
{
printf(" %dx(%d)+" , h->next->coef,h->next->exp);
p->next=p->next->next;
}
}
void main ()
{ initiate( a);
initiate( b);
polynode *polycreate(polynode a);
print(a);
polynode *polycreate( polynode b);
print(b );
polyadd(a, b);
print(a);
}