⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yiyuanduxiangshi.c

📁 数据结构中用于解决多项式相加问题
💻 C
字号:
#include<stdio.h> 
#include<malloc.h> 

typedef struct node{
float coef; 
int expn; 
struct node * next; 
}PLOY; 

void start()
{ 
printf("************************************\n"); 
printf("两个一元多项式相加\n");
printf("************************************\n");
printf("请选择操作:\n");
printf("0.退出\n");
printf("1.两个一元多项式相加\n");
}
void insert(PLOY *head,PLOY *inpt)
{ 
PLOY *pre,*now;/*两个指针,在其中间插入要加入的结点*/
int signal=0; 
pre=head;
if(pre->next==NULL) {pre->next=inpt;}/*只有头结点时*/
else {now=pre->next; 
while(signal==0) 
{ 
if(inpt->expn<now->expn)/*当插入结点的指数小于now时*/
{ 
if(now->next==NULL)/*now为最后一个结点*/
{ 
now->next=inpt; 
signal=1; 
} 
else /*pre,now分别向后移一位*/
{ 
pre=now; 
now=pre->next; 
} 
} 
else 
if(inpt->expn>now->expn)/*插入结点指数大于now,插入*/
{ 
inpt->next=now; 
pre->next=inpt; 
signal=1; 
} 
else   /*有相同指数项两者相加*/
{ 
now->coef=now->coef+inpt->coef; 
signal=1; 
free(inpt);
if(now->coef==0)/*和为0时*/
{ 
pre->next=now->next; 
free(now); 
} 
} 
} 
} 
} 
PLOY *creat(char ch)
{ 
PLOY *head,*inpt; 
float x; 
int y; 
head=(PLOY *)malloc(sizeof(PLOY));/*创建链表头*/
head->next=NULL; 
printf("请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)\n",ch); 
scanf("%f %d",&x,&y);
while(x!=0)   /*当系数不等于0时*/
{ 
inpt=(PLOY *)malloc(sizeof(PLOY));
inpt->coef=x; 
inpt->expn=y; 
inpt->next=NULL; 
insert(head,inpt);
scanf("%f %d",&x,&y);
} 
return head; 
}  

PLOY *addPLOY(PLOY *head,PLOY *pre)
{ 
PLOY *inpt; 
int flag=0; 
while(flag==0) 
{ 
if(pre->next==NULL) 
flag=1;
else 
{ 
pre=pre->next; 
inpt=(PLOY *)malloc(sizeof(PLOY));/*创建新链节*/
inpt->coef=pre->coef; 
inpt->expn=pre->expn; 
inpt->next=NULL; 
insert(head,inpt); 
}
} 
return head; 
} 
void print(PLOY *fun)
{ 
PLOY *printing; 
int flag=0; 
printing=fun->next;/*正在被打印的链节*/
if(fun->next==NULL) /*函数为空打印0*/
{ 
printf("0\n"); 
return; 
} 
while(flag==0) 
{ 
if(printing->coef>0&&fun->next!=printing) 
printf("+");
if(printing->coef==1);/*系数为1就不用打印系数*/
else if(printing->coef==-1) 
printf("-");
else 
printf("%f",printing->coef);/*其余情况都得打印*/
if(printing->expn!=0) printf("x^%d",printing->expn);/*指数为0不打印,不为0打印*/
else if((printing->coef==1)||(printing->coef==-1)) 
printf("1"); 
if(printing->next==NULL) 
flag=1;
else 
printing=printing->next; 
} 
printf("\n"); 
} 

void main() 
{ 
PLOY *f,*g; 
int sign=-1;
start(); 
while(sign!=0) 
{ 
scanf("%d",&sign); 
switch(sign) 
{ 
case 0: 
break;
case 1: 
{ 
f=creat('f');
printf("f(x)="); 
print(f); 
g=creat('g');
printf("g(x)="); 
print(g); 
printf("F(x)=f(x)+g(x)="); 
f=addPLOY(f,g);
print(f); 
sign=-1;
start();
break; 
} 
default:
{ 
printf("输入有误!请重新选择操作!\n");
start(); 
break; 
} 
} 
} 
printf("谢谢使用!\n"); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -