文档库 最新最全的文档下载
当前位置:文档库 › 一些程序

一些程序

#include "stdio.h"
#include "malloc.h"
typedef struct PLnode{ //定义一个节点,里面包含三个域,即系数域,指数域和指针域
float coef; //系数域
int expn; //指数域
struct PLnode *next; // 指针域
}PLnode,*PLinkList;
PLinkList addpolyn(PLinkList La,PLinkList Lb){ //两链表中的多项式相加函数体
/**/
int x,len;
float y;
PLinkList Lc,pa,pb,u,pc;
Lc=La;
len=0;
pc=Lc;
pa=La->next;
pb=Lb->next;
while(pa&&pb){

x=pa->expn-pb->expn;
if(x<0){

pc=pa;len++;
pa=pa->next;
}
else if(x==0){
y=pa->coef+pb->coef;
if(y!=0.0){
pa->coef=y;
pc=pa;len++;
}
else{
pc->next=pa->next;
free(pa);
}
pa=pc->next;
u=pb;
pb=pb->next;
free(u);
}
else{
u=pb->next;
pb->next=pa;
pc->next=pb;
pc=pb;
len++;
pb=u;

}
}
if(pb)pc->next=pb;
if(pa)pc->next=pa;
while(pc){
pc=pc->next;
if(pc)len++;
}
Lc->coef=len; //头节点的系数域为所加节点的长度
free(Lb);
return Lc;
}
void creatpolyn(PLinkList L,int m){ /*进行链表的初始化*/

int i;
float coef;
int expn;
PLinkList tail,now;
L->coef=m;
L->expn=-1; //头结点的指数域为-1
tail=L;
for(i=1;i<=m;i++){
now=(PLinkList)malloc(sizeof(PLnode)); //链入m个节点
printf("input ""该链表第 %d 个节点的系数和指数 " " coef&expn: ",i);
scanf("%f",&coef);
scanf("%d",&expn);
now->coef=coef;
now->expn=expn;
now->next=NULL;
tail->next=now;
tail=now;

}
}
void printpoly(PLinkList q){ //指定格式输出一元多项式的任意一项q

if(q->expn==0) printf("%.0f",q->coef);
else if(q->expn==1){
if(q->coef==1) printf("x");
else if(q->coef==-1) printf("-x");
else{



printf("%.0f",q->coef);
printf("x");

}
}
else if(q->coef==1) printf("x^%d",q->expn);
else if(q->coef==-1) printf("-x^%d",q->expn);
else printf("%.0fx^%d",q->coef,q->expn);

}
void printpolyn(PLinkList L){

int n;
PLinkList p;
p=L->next;
n=0;
while(p!=NULL){ //用一个while循环打印输出一元多项式 L
n++;
if(n==1) printpoly(p);
else if(p->coef>0){

printf("+");
printpoly(p);

}
else
printpoly(p);

p=p->next;
}
}

main(){
PLinkList La,Lb,Lc;
int n;
int m;
printf("\ninput n(该链表的长度) of La:");
scanf("%d",&n);
La=(PLinkList)malloc(sizeof(PLnode)); //建立La的头结点
creatpolyn(La,n); //进行La的初始化
printf("\nLa=:");
printpolyn(La); //打印出La
printf("\n\ninput m(该链表的长度) of Lb:");
scanf("%d",&m);
Lb=(PLinkList)malloc(sizeof(PLnode)); //建立Lb的头结点
creatpolyn(Lb,m); //进行Lb的初始化
printf("\nLb=:");

printpolyn(Lb); //打印出Lb
Lc=addpolyn(La,Lb);
printf("\n***************************");
printf("\nLc=:");
printpolyn(Lc); //打印出Lc
printf("\n");
}

相关文档