首页 > 其他分享 >数据结构练习笔记——求解由单链表表示的一元多项式的值

数据结构练习笔记——求解由单链表表示的一元多项式的值

时间:2023-07-27 10:11:47浏览次数:42  
标签:一元 单链 LNode int double next 多项式 数据结构

求解由单链表表示的一元多项式的值

【问题描述】一个形如

\[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;
}

记录一些数据结构学习过程的习题代码,便于日后查看。如有错误,欢迎交流指正。

标签:一元,单链,LNode,int,double,next,多项式,数据结构
From: https://www.cnblogs.com/zhuannnn/p/17584197.html

相关文章

  • 数据结构练习笔记——循环队列的基本操作
    循环队列的基本操作【问题描述】根据循环队列的类型定义,完成循环队列的基本操作。主函数中测试队列。【输入形式】一个整数m,表示入队的元素个数【输出形式】第一行:输出队头元素第二行:队列中元素依次出队以空格间隔【样例输入】5【样例输出】113579【样例输入】0【样......
  • 初识C数据结构之“*”和“&”(指针、解引用、取地址、引用)
    这天小阿杰又在看C数据结构——顺序表中几个传参的小小的内容引起了小阿杰大大的疑惑:(教材为严蔚敏老师的《数据结构(C语言版第2版)》)可怜的小阿杰当时只知道&取地址……后来查阅资料才对其中略知一二,那咱们下面就来唠唠。顺便提一下,引用&只在C++中有,C语言......
  • 7.25 day2数据结构优化dp
    战绩:100+100+20+54=374T1据lxl说是为了成绩好看加的题,难度大概cspjT1T2朴素dp然后树状数组优化一下T3赛时脑抽链,写了个dp,一直想优化dp,其实贪心就好了,过程更加简洁,优化很显然先将区间剖分成两段端点\(s_i=s_j\)相同的多条线段将区间每个点吸附到离他右边最近的一个线段......
  • 如何构造类似数组的数据结构?
    ..介绍在开始解决数组问题之前,理解并实现类似数组的数据结构是一个很好的实践。本课教您如何实现常见的数组操作,例如插入元素、删除元素、获取元素、求数组长度以及打印数组元素。我们正在建设什么?我们将从头开始构建一个数组,其中包含一些最常见的数组操作,如上所述。我们还将学习如......
  • 数据结构优化dp
    滚动数组在dp时经常会发现只有相邻阶段间状态才会有直接联系,在转移方程中的体现形如:只有前\(m\)个阶段能影响当前阶段的状态,因此我们不需要储存下\(n\)个阶段的所有状态,只需要储存\(m\)个阶段的状态,以做到优化存储空间的目的。用这种方法可以将dp某一维干掉,把\(\mat......
  • JavaScript数据结构和算法简述——数组
    为什么先讲数组数据结构可以简单的被分为线性结构和非线性结构。线性结构大致包括:数组(连续存储);链表(离散存储);栈(线性结构常见应用,由链表或数组增删和改进功能实现);队列(线性结构常见应用,由链表或数组增删和改进功能实现);非线性结构大致包括:树;图;其中,数组是应用最广泛的数据存储结构。它被......
  • 7.24 day1数据结构
    day1数据结构考试整场比赛打完了,没用数据结构?!结果:100+30+40+30=200T1正解异或好性质,100000以下最多128个因数枚举每个右端点,将前缀异或塞进桶里,同时枚举因数,看有几个和自己对应的前缀异或,直接计数即可T2暴力要输出分数,考场实在没办法,用浮点数做01分数规划,最后枚举分母(只......
  • 数据结构练习笔记——顺序栈的基本操作
    顺序栈的基本操作【问题描述】按照要求完成顺序栈的设计【输入形式】无【输出形式】2019181716151413121110987654321#include<iostream>usingnamespacestd;#include<stdlib.h>#include<stdio.h>#defineSTACKSIZE10#defineINCRE2......
  • python数据结构类型从入门到精通
    Python是一种灵活且强大的编程语言,它提供了丰富的数据类型和数据结构,使得我们可以有效地组织和操作数据。本文将介绍Python中常见的数据类型和数据结构,包括数字、字符串、列表、元组、字典和集合,并通过相关代码进行讲解。一、数字Python中的数字类型包括整数(int)、浮点数(float)和......
  • [C#基础学习]一些自带的常用数据结构
    System.Collections.ArrayList一个能储存任何数据类型的list,可用函数:​ Add:添加一个内容。​ AddRange:批量增加,将另一个ArrayList添加到末尾。​ Insert:在特定位置插入一个值。​ Remove:正序遍历删除第一个对应值。​ RemoveAt:删除数组位置对应元素。​ Clear:清空ArrayLis......