Polyn.h

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct polyn {double coef;int expn;struct polyn* next;
}PolyNode, *PLinkList;PLinkList CreatePolyn(int n);//创建一元多项式,使一元多项式呈指数递减
void PrintPolyn(PLinkList head);//输出一元多项式
PLinkList Addition(PLinkList L1,PLinkList L2);//多项式的加法
PLinkList Subtraction(PLinkList L1,PLinkList L2);//多项式的减法
PLinkList Reverse(PLinkList head);//将生成的链表逆置,使一元多项式呈指数递增形式
PLinkList MultiplyPolyn(PLinkList L1,PLinkList L2);//多项式的乘法
void Destory(PLinkList L); //销毁

Polyn.cpp

#include "Polyn.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <iostream>
#include <cmath>
using namespace std;PLinkList CreatePolyn(int n) {//创建一元多项式,使一元多项式呈指数递减PolyNode *p, *q, *s;PolyNode *head = NULL;int expn2;double coef2;head = (PLinkList)malloc(sizeof(PolyNode));//动态生成头结点if(!head) { exit(-2); }head->coef = 0.0;//初始化head->expn = 0;head->next = NULL;cout << "依次输入多项式的系数和指数:" << endl; while(n--) {cin >> coef2;cin >> expn2;s = (PLinkList)malloc(sizeof(PolyNode));if(!s) { exit(-2); }s->expn = expn2;s->coef = coef2;q = head->next ; // p = head;while(q && expn2 < q->expn) {p = q;q = q->next ;}if(q == NULL || expn2 > q->expn) {p->next = s;s->next = q;} else {q->coef += coef2;}}return head;
}void PrintPolyn(PLinkList head) {//输出一元多项式PolyNode *p = head->next ;while(p) {cout << p->coef;//printf("%1.1f",p->coef);if(p->expn) {cout << "*X^" << p->expn;//printf("*x^%d",p->expn);}if(p->next && p->next->coef > 0){cout << "+";//printf("+");} p = p->next ;}
}//相加
PolyNode *Addition(PLinkList L1,PLinkList L2) {PolyNode *head;head = (PLinkList)malloc(sizeof(PolyNode));  //作为返回链 if (!head) { exit(-2); }head->next = NULL;PLinkList p = L1->next, q = L2->next, r = head;while (p != NULL && q != NULL) {PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;if (p->expn > q->expn) {base->coef = p->coef;base->expn = p->expn;p = p->next;} else if (p->expn < q->expn) {base->coef = q->coef;base->expn = q->expn;q = q->next;} else {if (p->coef + q->coef != 0) {base->coef = p->coef + q->coef;base->expn = p->expn;} else {r->next = NULL;free(base);}p = p->next;q = q->next;}if (r->next != NULL) {r = r->next;}}while (p != NULL) {PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;base->coef = p->coef;base->expn = p->expn;r = r->next;p = p->next;}while (q != NULL) {PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;base->coef = q->coef;base->expn = q->expn;r = r->next;q = q->next; }return head;
}//相减
PolyNode *Subtraction(PLinkList L1,PLinkList L2) {PolyNode *head;head = (PLinkList)malloc(sizeof(PolyNode));  //作为返回链 if (!head) { exit(-2); }head->next = NULL;PLinkList p = L1->next, q = L2->next, r = head;while (p != NULL && q != NULL) {PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;if (p->expn > q->expn) {base->coef = p->coef;base->expn = p->expn;p = p->next;} else if (p->expn < q->expn) {base->coef = -q->coef;base->expn = q->expn;q = q->next;} else {if (p->coef != q->coef) {base->coef = p->coef - q->coef;base->expn = p->expn;} else {r->next = NULL;free(base);}p = p->next;q = q->next;}if (r->next != NULL) {r = r->next;}}while (p != NULL) {PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;base->coef = p->coef;base->expn = p->expn;r = r->next; p = p->next;}while (q != NULL) {      PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base) { exit(-2); }base->next = NULL;r->next = base;base->coef = -q->coef;base->expn = q->expn;r = r->next; q = q->next;}return head;
}//置逆
PolyNode *Reverse(PLinkList head) {//将生成的链表逆置,使一元多项式呈指数递增形式PolyNode *q, *r, *p = NULL;q = head->next ;while(q) {r = q->next ;q->next = p;p = q;q = r;}head->next = p;return head;
}//相乘
PolyNode *MultiplyPolyn(PLinkList L1,PLinkList L2) {//多项式的乘法PolyNode *pa, *pb, *pc, *u, *head;int k, maxExp;double coef;head = (PLinkList)malloc(sizeof(PolyNode));if(!head) {return NULL;}head->coef = 0.0;head->expn = 0;head->next = NULL;if(L1->next != NULL && L2->next != NULL) {maxExp = L1->next->expn + L2->next->expn ;}else {return head;}pc = head; L2 = Reverse(L2);for(k = maxExp; k >= 0; k--) {pa = L1->next ;while(pa != NULL && pa->expn > k) {pa = pa->next ;}pb = L2->next ;while(pb != NULL && pa != NULL && pa->expn + pb->expn < k){pb= pb->next ;}coef = 0.0;while(pa != NULL && pb != NULL) {if(pa->expn + pb->expn == k){coef += pa->coef * pb->coef ;pa = pa->next ;pb = pb->next ;} else if(pa->expn + pb->expn > k) {pa = pa->next ;} else {pb = pb->next ;}}if(coef != 0.0) {u = (PLinkList)malloc(sizeof(PolyNode));u->coef = coef;u->expn = k;u->next = pc->next ;pc->next = u;pc = u;}}L2 = Reverse(L2);return head;
}void Destory(PLinkList L) {for (PLinkList base = L->next; L != NULL; base = base->next) {free(L);L = base;}return ;
}

main.cpp

#include <iostream>
#include "Polyn.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
using namespace std;int main() {PLinkList A,B,C,D,E;int n;//构造多项式A cout << "输出多项式A的项数: ";cin >> n; A = CreatePolyn(n);cout << "A(x) = ";PrintPolyn(A);cout << endl << endl;//构造多项式B cout << "输出多项式B的项数: ";cin >> n; B = CreatePolyn(n);cout << "B(x) = ";PrintPolyn(B);cout << endl << endl;cout << "-------------------------多项式运算---------------------------\n";  //相加C = Addition(A, B);cout << "A(x) + B(x) = ";PrintPolyn(C);cout << endl << endl;//相减 D = Subtraction(A,B);cout << "A(x) - B(x) = ";PrintPolyn(D);cout << endl << endl;//相乘 E = MultiplyPolyn(A,B);cout << "A(x) * B(x) = ";PrintPolyn(E);cout << endl << endl;Destory(A);Destory(B);Destory(C);Destory(D);Destory(E);return 0;
}

运行结果

一元多项式加减乘运算-数据结构-课程设计相关推荐

  1. c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc

    一元多项式的计算数据结构课程设计.doc 一元多项式的计算加,减摘要题目一元多项式计算任务能够按照指数降序排列建立并输出多项式:能够完成两个多项式的相加.相减,并将结果输入:目录1引言2需求分析3概要 ...

  2. c语言实现一元多项式程序报告设计,数据结构课程设计报告一元多项式的计算..doc...

    数据结构课程设计报告一元多项式的计算. 题目:一元多项式的计算 --链表 摘要(题目) 一元多项式计算 任务:能够按照指数降序排列建立并输出多项式: 能够完成两个多项式的相加.相减,并将结果输入: 目 ...

  3. c语言小数表达式运算课程设计,数据结构课程设计表达式计算.doc

    数据结构课程设计表达式计算 福建农林大学计算机与信息学院 计算机类 课程设计报告 课程名称:算法与数据结构课程设计题目:表达式计算姓 名:系:数学系专 业:数学与应用数学年 级:学 号:指导教师:宁正 ...

  4. 数据结构-一元多项式加减程序

    //一元多项式加减程序 //程序:张建波 //时间:2005/7/12 PM:20-08 //功能: //     1:可以计算 1+2+3-1+2-5+6+3 (加减法均可) //     2: 可 ...

  5. 数据结构课程设计:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现...

    原来做的数据结构课程设计,今天整理资料时偶然发现了,自己留着没啥意思,共享一下吧,互相交流学习 要求 设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+- +Am ...

  6. 大学数据结构课程设计题目

    数据结构课程设计题目 1.         飞机订票系统(限1 人完成) 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构.具体数据自定) 查询: ...

  7. 数据结构课程设计-班级考勤管理系统

    数据结构课程设计-班级考勤管理系统 写这个博客,主要是为了总结一下,之前写过的东西,方便以后回来看看,写得不好,勿喷!!! 题目描述: 设计一个对本班所有人员进行考勤的管理系统,要求系统管理员(班长. ...

  8. 数据结构java教学计划编排_数据结构课程设计_教学计划编制问题

    数据结构课程设计_教学计划编制问题 (教学计划编制问题)目 录1.需求分析 -------.3-52.概要设计 -------.6-83.详细设计 ------ 8-134.调试分析 ------ 1 ...

  9. 数据结构课程设计(C语言实现)

    仅供自己学习使用 一.设计任务   设计一个应用程序(C/C++),利用多级菜单实现单链表.栈.队列.二叉树及图五种结构的基本操作及应用.具体内容包括: 单链表的基本操作及应用 ①创建 ②插入 ③删除 ...

最新文章

  1. IOS长按识别二维码失败
  2. python【蓝桥杯vip练习题库】ADV-272 change(思维)
  3. dedecms使用php语法,dedecms中使用php语句指南,dedecmsphp语句指南_PHP教程
  4. 【C语言】C语言实现面向对象编程之继承
  5. 采用Jetty搭建简单的WebApplicationServer
  6. 如何利用FineBI做财务分析
  7. 三个箭头循环标志_城市标志系统的概念和类别
  8. ubuntu16.04下安装wine及TIM
  9. javaCRC8计算的坑
  10. missingno错误不显示图片,pycharm
  11. 计算机组成原理-课设
  12. 了解品牌名称 TM (™) 和 R(®) 符号之间的区别至关重要
  13. 程序员必备的6款工具软件,炒鸡实用!
  14. 【算法】妙不可言---算法复杂性
  15. Revit二次开发:获取链接模型中的构件及几何元素
  16. bzoj3875: [Ahoi2014Jsoi2014]骑士游戏 spfa处理有后效性动规
  17. tab栏自动切换功能 鼠标移动上去取消自动切换 离开启动自动切换
  18. 成功解决:由于找不到 MSVCP100D.dll, 无法继续执行代码。重新安装可能会解决此问题。
  19. Luts预设 解密档案尘封历史风格化电影调色滤镜
  20. STL (Seasonal-Trend decomposition procedure based on Loess) 时间序列分解

热门文章

  1. win10 系统定时执行python脚本任务
  2. 橙仕X2单排栏板内饰分享
  3. Uniapp案例-聊天机器人demo
  4. 清明扫墓一定要知道的常识
  5. 一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
  6. Error: Invalid or corrupt jarfile
  7. 用C语言编写钢琴小程序
  8. python 图像拼接 检测_图像处理之图像拼接(python)
  9. 找靓机大促活动业务高峰护航案例
  10. 最新款苹果 iPad 写代码真香,包邮送一个!