多项式的表示与相加

  • 一元多项式的表示
  • 一元多项式的建立
  • 一元多项式相加
  • 一元多项式的打印
  • 完整代码

一元多项式的表示

typedef struct ploy {double coef; //系数部分int exp;  //指数部分struct ploy* next;
}ploy;

一元多项式的建立

输入的格式是 1+2x^1+2x^2这样的格式以#结束。

ploy* create_ploy() {ploy* head,*s,*p;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;s = head;char ch;int flag = 0; //记录的是除了数字与+之外输入的字母个数int key = 2;//标记正负p = (ploy*)malloc(sizeof(ploy));while (~scanf_s("%c", &ch,1)) {if (ch == '#')break;if (ch == '+'||ch =='-') {if (flag == 1)  //表明输入的是7x这样的情况s->exp = 1; //x指数尾1的情况p = (ploy*)malloc(sizeof(ploy)); //建立新节点flag = 0;if (ch == '+')key = 1;elsekey = 0;}if (isdigit(ch)) {if (flag == 0) {if(key)p->coef = ch - '0';else if(key ==0)p->coef = -(ch - '0');p->exp = 0; //默认指数是-1s->next = p;s = p;}else if (flag == 2) //指数不为0s->exp = ch - '0';}else if(ch!='+'&&ch!='-')flag++;//记得加上}s->next = NULL; //最后一个结点指向空return head;
}

一元多项式相加

实质是:

  • 指数不同是链表的合并
  • 指数相同,系数相加;若为0,去掉该结点;若不为0,修改结点的系数域。
ploy* add(ploy* La, ploy* Lb) {ploy* pa, * pb, * pc,*q,*head;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;pc = head;pa = La->next;pb = Lb->next;while (pa && pb) {if (pa->exp == pb->exp) { //指数相同pa->coef = pa->coef + pb->coef; //系数相加if ((int)pa->coef == 0) { //系数相加为0q = pa; //删除pa指向的结点pa = pa->next;free(q);}else //系数相加不为0{pc->next = pa;pc = pa;pa = pa->next;}q = pb;  //删除pb所指的结点pb = pb->next;free(q);}else if (pa->exp < pb->exp) {pc->next = pa;pc = pa;pa = pa->next;}//将pa所指的结点合并,pa指向下一个结点else {pc->next = pb;pc = pb;pb = pb->next;}//将pb所指的结点合并,pb指向下一个结点}//那个链没有处理完,就处理if (pa)pc->next = pa; else pc->next = pb;return head;
}

一元多项式的打印

void show(ploy* head) {ploy* p = head->next;while (p->next) {if (p->coef > 0.0) { //分为正负打印if (p->exp == 0)printf("+%.2lf", p->coef);else if (p->exp == 1)printf("+%.2lfx", p->coef);elseprintf("+%.2lfx^%d", p->coef, p->exp);}else {if (p->exp == 0)printf("-%.2lf", p->coef);else if (p->exp == 1)printf("-%.2lfx+", p->coef);elseprintf("-%.2lfx^%d+", p->coef, p->exp);}p = p->next;}//最后一个if(p->coef>0.0)printf("+%.2lfx^%d\n", p->coef, p->exp);elseprintf("-%.2lfx^%d\n", p->coef, p->exp);}

完整代码

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<ctype.h>
typedef struct ploy {double coef; //系数部分int exp;  //指数部分struct ploy* next;
}ploy;ploy* create_ploy() {ploy* head,*s,*p;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;s = head;char ch;int flag = 0; //记录的是除了数字与+之外输入的字母个数int key = 2;//标记正负p = (ploy*)malloc(sizeof(ploy));while (~scanf_s("%c", &ch,1)) {if (ch == '#')break;if (ch == '+'||ch =='-') {if (flag == 1)  //表明输入的是7x这样的情况s->exp = 1; //x指数尾1的情况p = (ploy*)malloc(sizeof(ploy)); //建立新节点flag = 0;if (ch == '+')key = 1;elsekey = 0;}if (isdigit(ch)) {if (flag == 0) {if(key)p->coef = ch - '0';else if(key ==0)p->coef = -(ch - '0');p->exp = 0; //默认指数是-1s->next = p;s = p;}else if (flag == 2) //指数不为0s->exp = ch - '0';}else if(ch!='+'&&ch!='-')flag++;//记得加上}s->next = NULL; //最后一个结点指向空return head;
}ploy* add(ploy* La, ploy* Lb) {ploy* pa, * pb, * pc,*q,*head;head = (ploy*)malloc(sizeof(ploy));head->next = NULL;pc = head;pa = La->next;pb = Lb->next;while (pa && pb) {if (pa->exp == pb->exp) { //指数相同pa->coef = pa->coef + pb->coef; //系数相加if ((int)pa->coef == 0) { //系数相加为0q = pa; //删除pa指向的结点pa = pa->next;free(q);}else //系数相加不为0{pc->next = pa;pc = pa;pa = pa->next;}q = pb;  //删除pb所指的结点pb = pb->next;free(q);}else if (pa->exp < pb->exp) {pc->next = pa;pc = pa;pa = pa->next;}//将pa所指的结点合并,pa指向下一个结点else {pc->next = pb;pc = pb;pb = pb->next;}//将pb所指的结点合并,pb指向下一个结点}//那个链没有处理完,就处理if (pa)pc->next = pa; else pc->next = pb;return head;
}void show(ploy* head) {ploy* p = head->next;while (p->next) {if (p->coef > 0.0) { //分为正负打印if (p->exp == 0)printf("+%.2lf", p->coef);else if (p->exp == 1)printf("+%.2lfx", p->coef);elseprintf("+%.2lfx^%d", p->coef, p->exp);}else {if (p->exp == 0)printf("-%.2lf", p->coef);else if (p->exp == 1)printf("-%.2lfx+", p->coef);elseprintf("-%.2lfx^%d+", p->coef, p->exp);}p = p->next;}//最后一个if(p->coef>0.0)printf("+%.2lfx^%d\n", p->coef, p->exp);elseprintf("-%.2lfx^%d\n", p->coef, p->exp);}int main() {ploy* head,*head1,*head2;head1 = create_ploy();getchar();head2 = create_ploy();show(head1);show(head2);head = add(head1, head2);show(head);return 0;
}

线性表的应用之多项式的表示与相加相关推荐

  1. 线性表C语言locate和ETget,线性表(数据结构重难点讲解)

    <线性表(数据结构重难点讲解)>由会员分享,可在线阅读,更多相关<线性表(数据结构重难点讲解)(104页珍藏版)>请在人人文库网上搜索. 1.线性表(数据结构重难点讲解)导读: ...

  2. 线性表算法题库_数据结构与算法(线性表)练习题

    .word 资料 . 三.写一个算法合并两个已排序的线性表. (用两种方法:数组表示的线性表(顺序表)和 指针表示的线性表(链表) ) 要求: 1 .定义线性表节点的结构,并定义节点的型和位置的型. ...

  3. 线性表实现多项式相加c语言,用线性表实现多个多项式相加

    今天开始想复习一下数据结构,就从线性表开始吧. 今天是用线性表实现多个多项式相加这个题目,自变量是x. 题目描述如下: 在数学上,一个一元多项式Pn(x)可按降幂写成:Pn(x) = pn x^n + ...

  4. 线性表的应用——多项式的计算

    应用顺序表计算多项式,把多项式存储在顺序表里,顺序表的下标对应多项式的系数 #include <stdio.h> #include <stdlib.h> #define MAX ...

  5. 线性表应用 多项式加法

    我们这个世界的一个问题是,蠢人信誓旦旦,智人满腹狐疑. --Bertrand Russell 文章目录 单链表定义 重载pair的输出运算符 求和函数 总体代码 多项式求和, 即输入两个多项式, 然后 ...

  6. 实习一 线性表及其应用 (题目:一元稀疏多项式的加法运算 )

    一.需求分析 1.输入并建立两个多项式: 2.多项式a与b相加,建立和多项式c: 3.输出多项式a,b,c.输出格式:比如多项式a为:A(x)=c1xe1+ c2xe2+-+ cmxem,其中,ci和 ...

  7. E. DS线性表—多项式相加

    [id:24][20分]E. DS线性表-多项式相加 题目描述 对于一元多项式 p(x)=p0+p1x+p2x2+ - +pnxn ,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2. ...

  8. 数据结构与算法——线性结构——线性表及其表示

    -"一,线性结构 1.顺序储存结构直接表示 多项式. 1).使用数组来表示多项式.(用数组下标来表示指数,值来表示系数) 可以表示成: 2).使用结构数组来表示.(把系数和指数看成一个二元组 ...

  9. c语言加法减法乘法,一元多项式的加法减法乘法c语言描述线性表应用

    一元多项式的加法减法乘法 --(c语言描述)线性表应用 来源:永远的北邮人 vc6.0下调试通过 #include #include #include #include #include #inclu ...

最新文章

  1. synchronized原理_Synchronized 实现原理
  2. .net里鼠标选中的text数据怎么获取_怎么利用Excel设置当天生日提醒功能
  3. 初次使用MyEclipse || Servlet 的生命周期
  4. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
  5. 常用DOS系统功能调用(INT 21H)一览表
  6. 微信小程序开发与应用 第一章 微信小程序的基本知识1
  7. 8分钟答辩稿_5分钟学会8个答辩小套路,教资面试没在怕的啦!
  8. Django新手图文教程
  9. mysql 百度地图 省市_批量获取百度地图的行政区划电子围栏
  10. 博图多版本共存安装教程 博图V14V15V16V17下载地址
  11. 修改图片名称并编号;批量处理及缩小图片内存大小(超实用的批处理图片功能)
  12. 史上最全的PS快捷键大全
  13. 计算机中 位(bit)、字节(Byte)、K、M、G之间的换算关系
  14. MySQL之SQL语句实现将三个查询结果集拼接成一个表
  15. windows下自动切换并连接wifi热点
  16. Google GDrive:不会是本地存储的终结者
  17. 数据库缓存服务——Redis(企业级)
  18. Angular学习笔记之慕课大漠穷秋塞主讲
  19. 蓝桥杯练习 小明上楼梯(递归设计)
  20. 金海佳学C++primer 练习9.15/9.16

热门文章

  1. 坦克大战c语言程序贴吧,坦克大战!
  2. AI、ML论文网站、如何阅读论文?
  3. 自动驾驶小车循迹 图像二值化方法
  4. C++ 栈和堆上建立对象的区别
  5. ValueError: This model has not yet been built. Build the model first by calling build() or calling f
  6. docker 二进制安装
  7. java date oracle_java对象属性为date oracle数据库字段为Timestamp 处理方式
  8. php请编写一个函数来将一个_为什么开发人员讨厌PHP
  9. rocketmq发送第一条消息(三)
  10. 对账模块和赊购退款、还款流程