数据结构之链表创建一元多项式,求一元多项式之和

前言

对于一元多项式,我们完全可以利用线性表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&&currenLb!=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;
}

数据结构之链表创建一元多项式,求一元多项式之和相关推荐

  1. 数据结构-静态链表创建

    静态链表: 也是一种线性存储结构,它结合了顺序表和链表的优点,既能快速访问元素,又能快速增加或删除数据元素.使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间&q ...

  2. 数据结构_C语言_实验一_线性结构 ——一元多项式求导

    文章目录 实验一 线性结构 1. 实验目的 2. 实验内容 3. 实验要求 4. 实验过程 (1) 问题描述 (2) 数据结构与算法设计 (3) 程序实现 (4) 实验结果 (5) 实验总结 实验一 ...

  3. 1010 一元多项式求导 (25 分)(c语言)

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. 输出格式: ...

  4. 浙江大学PAT上机题解析之1010. 一元多项式求导 (25)

    1010. 一元多项式求导 (25) 时间限制  400 ms 内存限制  32000 kB 代码长度限制  8000 B 判题程序    Standard 设计函数求一元多项式的导数. 输入格式:以 ...

  5. python链表的创建_python数据结构之链表的实例讲解

    在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...

  6. PAT (Basic Level) Practice (中文)1010 一元多项式求导 (25 分)

    题目 设计函数求一元多项式的导数.(注:x​n​​ (n为整数)的一阶导数为nxn−1​​ .) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空 ...

  7. 1010. 一元多项式求导

    题目截图: 思路: 简单模拟. 代码: 1 /* 2 1010. 一元多项式求导 3 */ 4 5 #include <stdio.h> 6 #include <string.h&g ...

  8. 7行代码AC——1010 一元多项式求导 (25分)

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 设计函数求一元多项式的导数.(注:x​n(n为整数)的一阶导数为n*x​n-1​​ .) 输入格式: 以指数递降 ...

  9. 7-16 一元多项式求导 (20 分)(详解+题目分析)

    7-16 一元多项式求导 (20 分) 1:题目 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: ...

最新文章

  1. 多重集合的排列和组合问题
  2. 机器学习-非监督分类算法之关联规则
  3. springmvc的原理架构,Struts2运行原理,springmvc和Struts2的区别
  4. windows渗透大全
  5. P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】
  6. 旧版Requests库
  7. 拜托!面试请不要再问我 Spring Cloud 底层原理 ...
  8. 2020双11,阿里巴巴集团数万数据库系统全面上云揭秘
  9. Linux——用户管理简单学习笔记(三)
  10. ExceptionError
  11. LeetCode for SQL 176. 第二高的薪水 (ifnull limit order by)
  12. 苹果发布新iPhone SE,售价3299元起;百度网盘破解者被捕;GitHub核心功能免费开放 | 极客头条...
  13. 百度进军游戏;腾讯起诉抄袭者;苹果急撤 watchOS 5.1 更新 | 极客头条
  14. Autolayout的简单介绍和示例代码
  15. oracle 创建备份目录,Oracle rman创建和自动化备份
  16. ActiveMQ 持久化
  17. 微信开放平台认证资料填报
  18. 阿里云对象存储OSS收费标准(很详细一看就懂)
  19. job每分钟执行 oracle_oracle的job怎么设置一个过程每5分钟执行一次
  20. h5 js 打开微信客户端

热门文章

  1. matlab hsi图像分割,提取图像的HSI图像分量
  2. 取后端数据_用 Flask+Axios 实现前后端数据通信:查询动森鱼类价格
  3. PIE SDK剔除栅格块算法
  4. linux ulimit 永久生效设置方法
  5. python实现跨excel的工作表sheet之间的复制
  6. Android Studio开发第二篇创建新项目
  7. Fedora 21 中添加及更新源的命令
  8. 基于DOM的Web信息提取方法
  9. RealARM210 V3.2硬件版本 nand flash地址分配明细
  10. 10.12 telnet:远程登录主机