数据结构中实现一元多项式简单计算

数据结构中实现一元多项式简单计算:

设计一个一元多项式简单的计算器。

基本要求:

一元多项式简单计算器的基本功能为:

(1)输入并建立多项式;

(2)输出多项式;

(3)两个多项式相加,建立并输出和多项式;

(4)两个多项式相减,建立并输出差多项式;

#include

#include

#define MAX 20

typedef struct

{

float coef ; int exp ; //系数 //指数 //多项式最多项数 //定义存放多项式的数组类型

} PolyArray [MAX ];

typedef struct pnode //定义单链表结点类型

{

float coef ; int exp ; //系数 //指数 struct pnode *next ;

//输出多项式 } PolyNode ; void DispPoly (PolyNode *L )

{

}

void CreateListR (PolyNode *&L , PolyArray a , int n ) //尾插法建表 {

PolyNode *s ,*r ; int i ; L =(PolyNode *)malloc (sizeof (PolyNode )); L ->next =NULL ; r =L ; { s =(PolyNode *)malloc (sizeof (PolyNode )); //创建新结点 //r始终指向终端结点, 开始时指向头结点 for (i =0;i next ; while (p !=NULL ) { } printf ("\n"); printf ("%gX^%d ", p ->coef , p ->exp ); p =p ->next ;

} } s ->exp =a [i ].exp ; r ->next =s ; r =s ;

//终端结点next 域置为NULL //按exp 域递减排序 //将*s插入*r之后 r ->next =NULL ; void Sort (PolyNode *&head )

{

} PolyNode *p =head ->next ,*q ,*r ; if (p !=NULL ) { } r =p ->next ; p =r ; while (p !=NULL ) { } r =p ->next ; q =head ; while (q ->next !=NULL && q ->next ->exp >p ->exp ) q =q ->next ; //在有序表中找插入*p的前驱结点*q //将*p插入到*q之后 p ->next =q ->next ; q ->next =p ; p =r ; //r保存*p结点后继结点的指针 //r保存*p结点后继结点的指针 //构造只含一个数据结点的有序表 p ->next =NULL ; //若原单链表中有一个或以上的数据结点

void Add (PolyNode *ha , PolyNode *hb , PolyNode *&hc ) //求两有序集合的并 {

PolyNode *pa =ha ->next ,*pb =hb ->next ,*s ,*tc ; float c ; hc =(PolyNode *)malloc (sizeof (PolyNode )); tc =hc ; while (pa !=NULL && pb !=NULL ) { if (pa ->exp >pb ->exp ) { } else if (pa ->exp exp ) { s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; tc ->next =s ; tc =s ; pa =pa ->next ; //复制结点 //创建头结点

} } } s ->exp =pb ->exp ; s ->coef =pb ->coef ; tc ->next =s ; tc =s ; pb =pb ->next ; //pa->exp=pb->exp else { } c =pa ->coef +pb ->coef ; if (c !=0) { } pa =pa ->next ; pb =pb ->next ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =c ; tc ->next =s ; tc =s ; //复制结点 //系数之和不为时创建新结点 if (pb !=NULL ) pa =pb ; //复制余下的结点 while (pa !=NULL ) { } tc ->next =NULL ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; tc ->next =s ; tc =s ; pa =pa ->next ; //复制结点

void Cut (PolyNode *ha , PolyNode *hb , PolyNode *&hd ) //求两有序集合的并 {

PolyNode *pa =ha ->next ,*pb =hb ->next ,*s ,*td ; float d ; hd =(PolyNode *)malloc (sizeof (PolyNode )); while (pa !=NULL && pb !=NULL ) { if (pa ->exp >pb ->exp ) { } else if (pa ->exp exp ) s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; td ->next =s ; td =s ; pa =pa ->next ; //复制结点 //创建头结点 td =hd ;

} } } else { } d =pa ->coef -pb ->coef ; if (d !=0) { } pa =pa ->next ; pb =pb ->next ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =d ; td ->next =s ; td =s ; //复制结点 //系数之和不为时创建新结点 //pa->exp=pb->exp s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pb ->exp ; s ->coef =-(pb ->coef ); td ->next =s ; td =s ; pb =pb ->next ; //复制结点 if (pb !=NULL ) pa =pb ; //复制余下的结点 while (pa !=NULL ) { } td ->next =NULL ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; td ->next =s ; td =s ; pa =pa ->next ; //复制结点

void main () {

PolyNode *ha ,*hb ,*hc ,*hd ,*he ; PolyArray a ={{1.2,0},{2.5,1},{3.2,3},{-2.5,5}}; PolyArray b ={{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}}; CreateListR (ha , a ,4); CreateListR (hb , b ,5); printf (" 原多项式A: " ); DispPoly (ha ); printf (" 原多项式B: " ); DispPoly (hb ); Sort (ha ); Sort (hb ); printf (" 有序多项式A: "); DispPoly (ha ); printf (" 有序多项式B: "); DispPoly (hb ); Add (ha , hb , hc );

} Cut (ha , hb , hd ); printf (" 多项式相减: " ); DispPoly (hd );

数据结构中实现一元多项式简单计算:

设计一个一元多项式简单的计算器。

基本要求:

一元多项式简单计算器的基本功能为:

(1)输入并建立多项式;

(2)输出多项式;

(3)两个多项式相加,建立并输出和多项式;

(4)两个多项式相减,建立并输出差多项式;

#include

#include

#define MAX 20

typedef struct

{

float coef ; int exp ; //系数 //指数 //多项式最多项数 //定义存放多项式的数组类型

} PolyArray [MAX ];

typedef struct pnode //定义单链表结点类型

{

float coef ; int exp ; //系数 //指数 struct pnode *next ;

//输出多项式 } PolyNode ; void DispPoly (PolyNode *L )

{

}

void CreateListR (PolyNode *&L , PolyArray a , int n ) //尾插法建表 {

PolyNode *s ,*r ; int i ; L =(PolyNode *)malloc (sizeof (PolyNode )); L ->next =NULL ; r =L ; { s =(PolyNode *)malloc (sizeof (PolyNode )); //创建新结点 //r始终指向终端结点, 开始时指向头结点 for (i =0;i next ; while (p !=NULL ) { } printf ("\n"); printf ("%gX^%d ", p ->coef , p ->exp ); p =p ->next ;

} } s ->exp =a [i ].exp ; r ->next =s ; r =s ;

//终端结点next 域置为NULL //按exp 域递减排序 //将*s插入*r之后 r ->next =NULL ; void Sort (PolyNode *&head )

{

} PolyNode *p =head ->next ,*q ,*r ; if (p !=NULL ) { } r =p ->next ; p =r ; while (p !=NULL ) { } r =p ->next ; q =head ; while (q ->next !=NULL && q ->next ->exp >p ->exp ) q =q ->next ; //在有序表中找插入*p的前驱结点*q //将*p插入到*q之后 p ->next =q ->next ; q ->next =p ; p =r ; //r保存*p结点后继结点的指针 //r保存*p结点后继结点的指针 //构造只含一个数据结点的有序表 p ->next =NULL ; //若原单链表中有一个或以上的数据结点

void Add (PolyNode *ha , PolyNode *hb , PolyNode *&hc ) //求两有序集合的并 {

PolyNode *pa =ha ->next ,*pb =hb ->next ,*s ,*tc ; float c ; hc =(PolyNode *)malloc (sizeof (PolyNode )); tc =hc ; while (pa !=NULL && pb !=NULL ) { if (pa ->exp >pb ->exp ) { } else if (pa ->exp exp ) { s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; tc ->next =s ; tc =s ; pa =pa ->next ; //复制结点 //创建头结点

} } } s ->exp =pb ->exp ; s ->coef =pb ->coef ; tc ->next =s ; tc =s ; pb =pb ->next ; //pa->exp=pb->exp else { } c =pa ->coef +pb ->coef ; if (c !=0) { } pa =pa ->next ; pb =pb ->next ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =c ; tc ->next =s ; tc =s ; //复制结点 //系数之和不为时创建新结点 if (pb !=NULL ) pa =pb ; //复制余下的结点 while (pa !=NULL ) { } tc ->next =NULL ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; tc ->next =s ; tc =s ; pa =pa ->next ; //复制结点

void Cut (PolyNode *ha , PolyNode *hb , PolyNode *&hd ) //求两有序集合的并 {

PolyNode *pa =ha ->next ,*pb =hb ->next ,*s ,*td ; float d ; hd =(PolyNode *)malloc (sizeof (PolyNode )); while (pa !=NULL && pb !=NULL ) { if (pa ->exp >pb ->exp ) { } else if (pa ->exp exp ) s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; td ->next =s ; td =s ; pa =pa ->next ; //复制结点 //创建头结点 td =hd ;

} } } else { } d =pa ->coef -pb ->coef ; if (d !=0) { } pa =pa ->next ; pb =pb ->next ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =d ; td ->next =s ; td =s ; //复制结点 //系数之和不为时创建新结点 //pa->exp=pb->exp s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pb ->exp ; s ->coef =-(pb ->coef ); td ->next =s ; td =s ; pb =pb ->next ; //复制结点 if (pb !=NULL ) pa =pb ; //复制余下的结点 while (pa !=NULL ) { } td ->next =NULL ; s =(PolyNode *)malloc (sizeof (PolyNode )); s ->exp =pa ->exp ; s ->coef =pa ->coef ; td ->next =s ; td =s ; pa =pa ->next ; //复制结点

void main () {

PolyNode *ha ,*hb ,*hc ,*hd ,*he ; PolyArray a ={{1.2,0},{2.5,1},{3.2,3},{-2.5,5}}; PolyArray b ={{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}}; CreateListR (ha , a ,4); CreateListR (hb , b ,5); printf (" 原多项式A: " ); DispPoly (ha ); printf (" 原多项式B: " ); DispPoly (hb ); Sort (ha ); Sort (hb ); printf (" 有序多项式A: "); DispPoly (ha ); printf (" 有序多项式B: "); DispPoly (hb ); Add (ha , hb , hc );

} Cut (ha , hb , hd ); printf (" 多项式相减: " ); DispPoly (hd );


相关文章

  • 初中数学 华东师大版 目录内容
  • 华东师大版初中数学按章节目录 七年级上 第1章 走进数学世界 §1.1 从实际问题到方程:1. 数学伴我们成长:2. 人类离不开数学:3. 人人都能学会数学:阅读材料 华罗庚的故事:视数学为生命的陈景润:少年高斯的速算: §1.2 让我们来 ...查看


  • 青岛版初中数学章节
  • 青岛版初一数学 (上册) 第一章 基本的几何图形 1.1 我们身边的图形世界 1.2 点.线.面.体 1.3 线段.射线和直线 1.4 线段的度量和比较 同步练习 单元测试 本章综合 第二章 有理数 2.1 生活中的正数和负数 2.2 数轴 ...查看


  • 华师大版初中数学目录2015年版
  • 华东师大版初中数学教材目录 七上 第1章 走进数学世界 数学伴我们成长 人类离不开数学 人人都能学会数学 阅读材料 华罗庚的故事 阅读材料 幻方 第2章 有理数 §2.1 有理数 1. 正数与负数 2. 有理数 §2.2 数轴 1. 数轴 ...查看


  • 苏教版初中数学原教材与新教材目录对照表
  • 苏教版初中数学原教材与新教材目录对照表 原教材 第一章 1.1生活 数学 新教材 第一章 数学与我们同行 1.1生活 数学 1.2活动 思考 2.1正数与负数 2.2有理数与无理数 2.3数轴 2.4绝对值与相反数 第二章有理数 2.5有理 ...查看


  • 数据结构课程设计[一元多项式的四则运算]
  • 一元多项式的四则运算 学生姓名:XX 指导老师:XX 摘 要 本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建.录入.存储.打印.以及之间的运算.在本课程设计中,程序设计语言为C++语言,程序运行平台为Wind ...查看


  • 用C语言实现多项式简单计算器的设计
  • 武汉理工大学华夏学院 课程设计报告书 课程名称: 数据结构 题 目:用C 语言实现多项式简单计算器的设计 系 名: 信息工程系 专业班级: 软件工程1121班 姓 名: 邓 燕 蓉 指导教师: 王 绪 梅 2013 年 6月 28日 课程设 ...查看


  • 2013版湘教版七年级下册数学教学说明书[1]1
  • 七年级上期数学教学学科说明书 一. 基本情况: 本学期担任的是七年级的数学教学.七年级学生往往对课程增多.课堂学习容量加大不适应,顾此失彼,精力分散,听课效率下降,要重视听法的指导.学习离不开思维,善思则学得活,效率高,不善思则学得死,效果 ...查看


  • 初中数学课本目录
  • 七年级(上册) 第一章:我们与数学同行 1.1 生活 数学 1.2 活动 思考 第二章:有理数 2.1 比0小的数 2.2 数轴 2.3 绝对值与相反数 2.4 有理数的加法与减法 2.5 有理数的乘法与除法 2.6 有理数的乘方 2.7 ...查看


  • 本科毕业论文_多项式方程的判别式与求根公式
  • 东 莞 理 工 学 院 本 科 毕 业 论 文 (2015届) 题 目: 多项式方程的判别式与求根公式 学生姓名: 姚培基 学 号: [1**********]0 院(系): 计算机学院 专业班级: 信息与计算科学(2)班 指导教师: 起止 ...查看


热门内容