资源简介
数据结构作业中用c语言的链表来实现一元多项式的加减乘运算!
代码片段和文件信息
#include
#include
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“);
printf(“2.两个一元多项式相乘\n“);
printf(“3.两个一元多项式相减\n“);
}
void insert(PLOY *headPLOY *inpt)//查找位置插入新链节程序
{
PLOY *pre*now;
int signal=0;
pre=head;//pre定义为现在的前一个链节
if(pre->next==NULL) {pre->next=inpt;}
else {now=pre->next;
while(signal==0)
{
if(inpt->expnexpn)//当新链节小于现在的连接时向后移一个链节
{
if(now->next==NULL)
{
now->next=inpt;
signal=1;
}
else
{
pre=now;
now=pre->next;
}
}
else
if(inpt->expn>now->expn)//如果发现比现在的链节大了就插入到这个连接的前面
{
inpt->next=now;
pre->next=inpt;
signal=1;
}
else
{
now->coef=now->coef+inpt->coef;
signal=1;
free(inpt);//与当前链节相等指数
if(now->coef==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)
{
inpt=(PLOY *)malloc(sizeof(PLOY));//创建新链节
inpt->coef=x;
inpt->expn=y;
inpt->next=NULL;
insert(headinpt);//不然就查找位置并且插入新链节
printf(“请输入一元多项式%c的下一项:(以0 0 结束!)\n“ch);
scanf(“%f %d“&x&y);
}
return head;
}
PLOY *addPLOY(PLOY *headPLOY *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(headinpt);
}//否则把当前“g(x)”的链节插入到“y(x)”中
}
return head;
}
PLOY *minusPLOY(PLOY *headPLOY *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=0-pre->coef;
inpt->expn=pre->expn;
inpt->next=NULL;
insert(headinpt);
}//否则把当前“g(x)”的链节插入到“y(x)”中
}
return head;
}
PLOY *byPLOY(PLOY *head1PLOY *head2)
评论
共有 条评论