数据结构之链表创建一元多项式,求一元多项式之和
数据结构之链表创建一元多项式,求一元多项式之和
前言
对于一元多项式,我们完全可以利用线性表P(a0,a1,a2,…,an)表示,这样的线性表在求两个多项式相加等操作时确实简单,但是多于如下的多项式:
利用上述线性表将存储为S(1,0,0,0,0,…,3,…,2);这样的结构显然对内存造成浪费
为了解决以上问题,可以将上面的线性表改善为P((a1,e1),(a2,e2),…,(am,em))只存储系数不为0的项,下面是该线性表的链式存储结构的代码实现。
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"#define LEN sizeof(node);typedef struct polynode
{int coef;//系数int exp;//指数struct polynode *next;
}node,*ListPolynode;/*倒序创建一元多项式*/
void createPoly(ListPolynode L,int n)
{ListPolynode p;for (int i=n;i>0;i--){p=(ListPolynode)malloc(sizeof(node));printf("请输入第%d项系数\n",i);scanf_s("%d",&p->coef);printf("请输入第%d项指数\n",i);scanf_s("%d",&p->exp);p->next=L->next;L->next=p;}
}
/*正序创建一元多项式*/
ListPolynode createPoly1(ListPolynode L,int n)
{ListPolynode p;ListPolynode head=L;for (int i=0;i<n;i++){p=(ListPolynode)malloc(sizeof(node));printf("请输入第%d项系数\n",i+1);scanf_s("%d",&p->coef);printf("请输入第%d项指数\n",i+1);scanf_s("%d",&p->exp);L->next=p;p->next=NULL;L=L->next;}return head;
}
/*打印一元多项式*/
void printfPoly(ListPolynode L)
{ListPolynode p=L->next;while(p){printf("%d*x^%d ",p->coef,p->exp);p=p->next;}printf("\n");
}/*多项式相加*/
void addPoly(ListPolynode La,ListPolynode Lb)
{ListPolynode currenLa=La->next;//指向La的当前结点ListPolynode currenLb=Lb->next;//指向Lb的当前结点ListPolynode temp;//待释放空间的临时结点ListPolynode pre=La;/*位置指针,指向和多项式La,利用pre修改La*/int sum;//相同指数结点系数之和while (currenLa!=NULL&¤Lb!=NULL){if (currenLa->exp<currenLb->exp)//La的当前结点指小于于Lb的当前结点指数{//Lb的当前位置不变,La当前位置后移pre->next=currenLa;pre=pre->next;currenLa=currenLa->next;} else if (currenLa->exp==currenLb->exp)//La的当前结点指数等于Lb的当前结点指数{sum=currenLa->coef+currenLb->coef;if (sum!=0){//将La当前结点的系数改为sum,并链接到pre;将La的当前结点后移,之后过河拆桥将La的当前结点释放currenLa->coef=sum;pre->next=currenLa;pre=pre->next;currenLa=currenLa->next;temp=currenLb;currenLb=currenLb->next;free(temp);} else{temp=currenLa->next;free(currenLa);//过河拆桥干掉La当前结点currenLa=temp;temp=currenLb->next;free(currenLb);//策略雷同,过河拆桥currenLb=temp;}}else//La的当前结点指数大于Lb的当前结点指数{//Lb当前位置添加到La当前位置之前,同时Lb向后移动一位,La向后移动一位pre->next=currenLb;pre=pre->next;currenLb=currenLb->next;}}if (currenLa!=NULL)//La未结束,将其全部链接到pre{pre->next=currenLa;}else//若Lb未结束,将其全部链接到pre{pre->next=currenLb;}
}int _tmain(int argc, _TCHAR* argv[])
{ListPolynode La=(ListPolynode)malloc(sizeof(node));La->next=NULL;printf("请输入创建一元多项式的项数\n");int n;scanf_s("%d",&n);createPoly1(La,n);printfPoly(La);ListPolynode Lb=(ListPolynode)malloc(sizeof(node));Lb->next=NULL;printf("请输入创建一元多项式的项数\n");scanf_s("%d",&n);createPoly(Lb,n);printfPoly(Lb);addPoly(La,Lb);printfPoly(La);system("pause");return 0;
}
数据结构之链表创建一元多项式,求一元多项式之和相关推荐
- 数据结构-静态链表创建
静态链表: 也是一种线性存储结构,它结合了顺序表和链表的优点,既能快速访问元素,又能快速增加或删除数据元素.使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间&q ...
- 数据结构_C语言_实验一_线性结构 ——一元多项式求导
文章目录 实验一 线性结构 1. 实验目的 2. 实验内容 3. 实验要求 4. 实验过程 (1) 问题描述 (2) 数据结构与算法设计 (3) 程序实现 (4) 实验结果 (5) 实验总结 实验一 ...
- 1010 一元多项式求导 (25 分)(c语言)
设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. 输出格式: ...
- 浙江大学PAT上机题解析之1010. 一元多项式求导 (25)
1010. 一元多项式求导 (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 设计函数求一元多项式的导数. 输入格式:以 ...
- python链表的创建_python数据结构之链表的实例讲解
在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...
- PAT (Basic Level) Practice (中文)1010 一元多项式求导 (25 分)
题目 设计函数求一元多项式的导数.(注:xn (n为整数)的一阶导数为nxn−1 .) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空 ...
- 1010. 一元多项式求导
题目截图: 思路: 简单模拟. 代码: 1 /* 2 1010. 一元多项式求导 3 */ 4 5 #include <stdio.h> 6 #include <string.h&g ...
- 7行代码AC——1010 一元多项式求导 (25分)
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1 .) 输入格式: 以指数递降 ...
- 7-16 一元多项式求导 (20 分)(详解+题目分析)
7-16 一元多项式求导 (20 分) 1:题目 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: ...
最新文章
- 多重集合的排列和组合问题
- 机器学习-非监督分类算法之关联规则
- springmvc的原理架构,Struts2运行原理,springmvc和Struts2的区别
- windows渗透大全
- P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】
- 旧版Requests库
- 拜托!面试请不要再问我 Spring Cloud 底层原理 ...
- 2020双11,阿里巴巴集团数万数据库系统全面上云揭秘
- Linux——用户管理简单学习笔记(三)
- ExceptionError
- LeetCode for SQL 176. 第二高的薪水 (ifnull limit order by)
- 苹果发布新iPhone SE,售价3299元起;百度网盘破解者被捕;GitHub核心功能免费开放 | 极客头条...
- 百度进军游戏;腾讯起诉抄袭者;苹果急撤 watchOS 5.1 更新 | 极客头条
- Autolayout的简单介绍和示例代码
- oracle 创建备份目录,Oracle rman创建和自动化备份
- ActiveMQ 持久化
- 微信开放平台认证资料填报
- 阿里云对象存储OSS收费标准(很详细一看就懂)
- job每分钟执行 oracle_oracle的job怎么设置一个过程每5分钟执行一次
- h5 js 打开微信客户端