#2
Susake2013-04-16 12:01
程序代码: #include <stdio.h> #include <malloc.h> struct node { int coef; int exp; struct node *next; }; typedef struct node polynode; polynode *a,*b; polynode *polycreate(polynode a)//函数:建立单链表 { 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); } 1.函数没参数 2.NULL没定义 |
采用用单链表表示的一元多项式,实现两个一元多项式相加功能。
实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。#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);
}