关于单链表的问题
实验内容采用用单链表表示的一元多项式,实现两个一元多项式相加功能。
实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。
基本要求:
(1)初始化单链表;
(2)程序具有单链表初始化、一元多项式建立、一元多项式相加和显示功能,可根据用户需要连续进行这些操作;
(3)根据键盘输入的数据在单链表中查找结点;
(4)任一操作结束后将单链表中的内容输出;
(5)可由用户选择退出程序。
我的程序是这样的
#include
#include
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始终指向单链表的尾,便于尾插法建表*/
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;
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;
}
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 )//函数:显示输出单链表中的所有结点。
{ printf("y=");
while(h->next!=NULL)
{
printf(" %dx(%d)+" , h->next->coef,h->next->exp);
h->next=h->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);
}
总是显示调用打印函数式出错 怎么改啊