数据结构练习笔记——求解由单链表表示的一元多项式的值
求解由单链表表示的一元多项式的值
【问题描述】一个形如
\[a_0x^0+a_1x^1+...+a_nx^n \]的一元多项式含有n+1项,每一项由系数和指数唯一确定,可表示成由系数项和指数项构成的一个二元组(系数,指数),一元多项式则可以表示成二元组的集合{(a0,0),(a1,1),(a2,2)...(an,n)},可看成是数据元素为二元组(系数,指数)的线性表,若将某一个一元多项式的二元组集合采用链式存储结构存储于带头结点的单链表中,请根据给定的x值,求解一元多项式的值。
例如:\[A(x)=3x^2-4x^6+6x^8+10x^9 \]可表示成{(3,2),(-4,6),(6,8),(10,9)},含有4个元素的线性表
下列的createPolyList函数,用于创建含有n项的一元多项式的带头结点的单链表存储结构,
getValue函数则根据给定的一元多项式L和x值,求解并返回一元多项式的值。
请将程序补充完整。
【输入形式】
第一行:一元多项式的项数
第二行:一元多项式的每一项的系数项和指数项,中间用空格间隔
第三行:一元多项式的x的取值
【输出形式】计算结果
【样例输入】
4
3 2 -4 6 6 8 10 9
1
【样例输出】15
#include  <iostream>
#include  <cstdlib>
using  namespace  std;
struct  PolyNode {
	double  coef;//系数
	int  exp;//次数
};
struct  LNode {
	PolyNode  data;
	LNode  *next;
};
typedef  LNode  *LinkList;
void  createPolyList(LinkList  &L,int  n) {
	L=new  LNode;
	L->next=NULL;
	LNode  *r,*p;
	r=L;
	for(int  i=1;  i<=n;  i++) {
		p=new  LNode;
		cin>>p->data.coef>>p->data.exp;
		r->next=p;
		r=p;
	}
	r->next=NULL;
}
//-----以下为本人所写-----
double getValue(LinkList L,double x) {
	double sum=0;
	LNode* p=L->next;
	while(p) {
		double s=x;
		for(int i=1; i<p->data.exp; i++)
			s=s*x;//计算x的p->data.exp次幂
		sum=sum+s*p->data.coef;//各项求和
		p=p->next;
	}
	return sum;
}
/*以下为OJ系统提供的参考答案
double getValue(LinkList L,double x){
    double value=0,t;
    LNode *p;
    p=L->next;
    while(p){
        t=p->data.coef;
        for(int j=1; j<=p->data.exp; j++)
            t=t*x;
        value+=t;
        p=p->next;
    }
    return value;
}*/
//-------------------
int  main() {
	LinkList  L;
	int  n;//多项式的项数
	double  x;
	cin>>n;
	createPolyList(L,n);
	cin>>x;
	cout<<getValue(L,x);
	return  0;
}
记录一些数据结构学习过程的习题代码,便于日后查看。如有错误,欢迎交流指正。
                    
                
                
            
        
浙公网安备 33010602011771号