注意嗷:这里的一元多项式输入时,指数exp不一定是按照递增顺序输入的,但是最终我们想获得一个指数递增的链表形式,所以在插入新结点时,需要进行判断,把他放在合适的位置。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//结构体定义
typedef struct node
{
int cofe,exp;
struct node *next;
}Lnode,*Linklist;
//建立系数递增链表 并输入一元多项式的系数及指数
int Create_L(Linklist &L,int n)
{
Linklist s,g,p,r;//指示指针
int i;
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;//建立头结点
for(i=1;i<=n;i++)//接下来输入剩余项系数与指数。但在插入链表前需要比较指数,放在适宜位置
{
s=(Linklist)malloc(sizeof(Lnode));
printf("输入该项系数:");
scanf("%d",&s->cofe);
printf("输入该项指数:");
scanf("%d",&s->exp);
g=L->next;
p=L;
while(g!=NULL&&s->exp>g->exp)
{
g=g->next;p=p->next;//该结点需要插入在原链表p指针所指结点之后
}
s->next=p->next;
p->next=s;
}
}
//运算多项式的值
int Sum_L( Linklist L,int x)
{
int sum=0;
Linklist w;;
w=L->next;
while(w)
{
sum=sum+w->cofe*pow(x,w->exp);
w=w->next;
}
printf("多项式的值为:%d\n",sum);
}
//打印一元多项式链表
int Print_L(Linklist L)
{
Linklist k;
k=L->next;
printf("一元多项式链表的系数和指数为:\n");
while(k)
{
printf("%d %d\n",k->cofe,k->exp);
k=k->next;
}
}
//运算主函数
int main()
{
Linklist L,w;
int n,x,sum=0;
printf("请输入多项式的项数n:");
scanf("%d",&n);
Create_L(L,n);
Print_L(L);
printf("请输入多项式的x的值:");
scanf("%d",&x);
Sum_L(L,x);
}
附运算结果如下: