链表练习(一元多项式):一元多项式采用带表头结点的单链表存放,用类C语言设计算法求一元多项式的值。

注意嗷:这里的一元多项式输入时,指数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);
} 

附运算结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_51777949/article/details/115356849
今日推荐