基于c数据结构——实现多项式合并同类项,加法和乘法
#include<stdio.h>
#include<malloc.h>
//定义结点的结构体
typedef struct
{
float x;//系数
int z;//指数
}polynomial;
typedef struct Node
{
polynomial data;
struct Node *next;
}SLNode;
//初始化
void Initial(SLNode **head)
{
*head=(SLNode *)malloc(sizeof(SLNode));
(*head)->next=NULL;
}
//求当前链表数据元素的个数
int Length(SLNode *head)
{
SLNode *p;//辅助指针
int size=0;
p=head;
while(p!=NULL)
{
size++;
p=p->next;
}
return size;
}
//插入多个元素
void Insert(SLNode *head)
{
SLNode *p,*s;//辅助指针
int m;
float n;
p=head;
printf("输入系数x:");
scanf("%f",&n);
printf("输入指数z:");
scanf("%d",&m);
while(m!=0)
{
s=(SLNode *)malloc(sizeof(SLNode));
s->data.x=n;//系数赋值
s->data.z=m;//指数赋值
p->next=s->next;
p->next=s;
printf("输入系数x:");
scanf("%f",&n);
printf("输入指数z:");
scanf("%d",&m);
}
}
/*删除当前指针所指向的元素
void Delete(SLNode *curr)
{
SLNode *p;//辅助指针
p=curr;
curr=curr->next;//指针后移
free(p);
}
*/
///一元多项式及其操作的实现
#include<stdio.h>
#include<malloc.h>
#include"queue.h"
//建立多项式
SLNode *Creat()
{
SLNode *head,*p,*q;
int i,j;
printf("请输入多项式的项数:");
scanf("%d",&j);
Initial(&head);
for(i=0;i<j;i++)
{ q=head;
p=(SLNode*) malloc(sizeof(SLNode));
printf("请输入第%i项的系数和指数:\n\n",i);
printf("请输入第%i项的系数:",i);
scanf("%f",&p->data.x);
if(p->data.x==0)
{
printf("您输入的系数有误,请重新输入!\n");
printf("请输入第%i项的系数:",i);
scanf("%f",&p->data.x);
}
printf("请输入第%i项的指数:",i);
scanf("%d",&p->data.z);
if(q->next==NULL)
{
p->next=q->next;
q->next=p;
}
else
{//printf("hO\n");
while(q->next!=NULL)
{
if(p->data.z==q->next->data.z) {q->next->data.x+=p->data.x;break;}
else if(p->data.z>q->next->data.z) q=q->next;
else if(p->data.z<q->next->data.z) {p->next=q->next;q->next=p;break;}
}
if(q->next==NULL)
{
p->next=q->next;
q->next=p;
}
}
}
while(q->next!=NULL)
{q=q->next;}
q->next=NULL;
// printf("hO\n");
return head;
}
//输出多项式
void printPolyn(SLNode *head)
{
SLNode *p;
int temp=1;
p=head->next;
while(p!=NULL)
{
if(temp==1)
{
if(p->data.z==0) printf("%.2f",p->data.x);
else
{
if(p->data.x==1) printf("x^%d",p->data.z);
else if(p->data.x==-1) printf("-x^%d",p->data.z);
else printf("%.2fx^%d",p->data.x,p->data.z);
}
temp=0;
}
else if(temp==0)
{
if(p->data.x==1) printf("+x^%d",p->data.z);
else if(p->data.x==-1) printf("-x^%d",p->data.z);
else if(p->data.x>0) printf("+%.2fx^%d",p->data.x,p->data.z);
else if(p->data.x<0) printf("%.2fx^%d",p->data.x,p->data.z);
}
p=p->next;
}
printf("\n");
}
//多项式求值
double Polynzhi(SLNode *L,float t)
{
SLNode *p;
int i;
float v;
double m=0;
p=L->next;
while(p!=NULL)
{
if(p->data.z>0)
{
v=1;
for(i=1;i<=p->data.z;i++) v=v*t;
}
else if(p->data.z<=0)
{
v=1;
for(i=p->data.z;i<0;i++) v=v/t;
}
m+=p->data.x*v;
p=p->next;
}
return m;
}
int Polynadd(SLNode *pa,SLNode *pb,SLNode **pc)
{
void Initial(SLNode **head);
float x;
SLNode *p,*q,*r;
Initial(pc);
p=pa->next;
q=pb->next;
r=*pc;
while(p!=NULL&&q!=NULL)
{
if(p->data.z<q->data.z)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.z=p->data.z;
r->data.x=p->data.x;
p=p->next;
}
else if(p->data.z==q->data.z)
{
x=p->data.x+q->data.x;
if(x)
{
r->next=(SLNode *)malloc(sizeof (SLNode));
r=r->next;
r->data.z=p->data.z;
r->data.x=x;
p=p->next;
q=q->next;
}
else if(x==0)
{
p=p->next;
q=q->next;
}
}
else if(p->data.z>q->data.z)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.z=q->data.z;
r->data.x=q->data.x;
q=q->next;
}
}
while(p!=NULL&&q==NULL)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.z=p->data.z;
r->data.x=p->data.x;
p=p->next;
}
while(p==NULL&&q!=NULL)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.z=q->data.z;
r->data.x=q->data.x;
q=q->next;
}
r->next=NULL;
return 1;
}
//多项式乘法
int Polynmul(SLNode *pa,SLNode *pb,SLNode **pd)
{
void Initial(SLNode **head);
float x,y;
int i=1,z;
SLNode *p,*q,*r;
Initial(pd);
// p=pa->next;
p=pa;
q=pb;
r=*pd;
while(p->next!=NULL)
{
p=p->next;
q=pb->next;
while(q!=NULL)
{
// r->next=(SLNode *)malloc(sizeof(SLNode));
// r=r->next;
if(i==1) ///第一项
{
x=p->data.x*q->data.x;
if(x==0)
{
q=q->next;
i=1;
}
else if(x!=0)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.z=p->data.z+q->data.z;
r->data.x=x;
q=q->next;
i=0;
}
} ///第一项
else if(i==0)
{
z=p->data.z+q->data.z;
x=p->data.x*q->data.x;
if(x==0) q=q->next;
else if(x!=0)
{
if(r->data.z<z)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r=r->next;
r->data.x=x;
r->data.z=z;
q=q->next;
p=p;
}
else if(r->data.z==z)
{
y=x+r->data.x;
if(y==0)
{
q=q->next;
p=p;
}
else if(y!=0)
{
r->data.x=y;
r->data.z=z;
q=q->next;
p=p;
}
}
else if(r->data.z>z)
{
r->next=(SLNode *)malloc(sizeof(SLNode));
r->next->data.x=r->data.x;
r->next->data.z=r->data.z;
r->data.x=x;
r->data.z=z;
r=r->next;
q=q->next;
p=p;
}
}
}
}
//p=p->next;
}
r->next=NULL;
return 1;
}
//测试程序
#include<stdio.h>
#include<malloc.h>
#include"queue1.h"
#include<windows.h>
int main()
{
//实现多项式a和b
SLNode *a,*b,*c,*d;
int i;
float t;
double z;
printf("请输入未知数t的值:");
scanf("%f",&t);
a=Creat();
printf("多项式a为:");
printPolyn(a);
b=Creat();
printf("多项式b为:");
printPolyn(b);
printf("*******************************************\n");
printf("******1.多项式求值*********2.多项式加法****\n");
printf("*******************************************\n");
printf("******3.多项式乘法*********4.退出系统******\n");
printf("*******************************************\n");
printf("请输入您的选择:\n");
while(1)
{
scanf("%d",&i);
switch(i)
{
case 1:{
z=Polynzhi(a,t);
printf("多项式a的值为:%lf",z);
printf("\n");
z=Polynzhi(b,t);
printf("多项式b的值为:%lf",z);
printf("\n");
continue;
}
case 2:{
printf("多项式a与多项式b的和为:");
Polynadd(a,b,&c);
printPolyn(c);
printf("\n");
z=Polynzhi(c,t);
printf("多项式a与b的和c多项式的值为:%lf",z);
printf("\n");
continue;
}
case 3:{
printf("多项式a与多项式b的积为:");
Polynmul(a,b,&d);
printPolyn(d);
printf("\n");
z=Polynzhi(d,t);
printf("多项式a与b的积d多项式的值为:%lf",z);
printf("\n");
continue;
}
case 4:
{
printf("正在退出系统,请稍等......\n");
exit(0);
}
}
}
return 0;
}
基于c数据结构——实现多项式合并同类项,加法和乘法相关推荐
- 高阶多项式合并同类项程序c语言,多项式合并同类项问题
多项式合并同类项问题 这个函数编译通过 就是运行不了 我看不出是哪里有问题啊 pn * tongleixiang(pn * head) //pn 是多项式的节点类型 { pn *p,*t ...
- 多项式合并同类项c语言链表,链表透过文件读写计算两个多项式之积
当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积 链表透过文件读写计算两个多项式之积 www.myexceptions.net 网友分享于:2014-03-24 浏览:10次 ...
- 高阶多项式合并同类项程序c语言,c语言实现两多项式相乘并排序合并同类项.doc...
#includetypedef struct Node { int coef;//系数 int exp;//指数 struct Node *next; }PolyNode; PolyNode *Cre ...
- 高阶多项式合并同类项程序c语言,c语言实现两多项式相乘,并排序,合并同类项.doc...
#include typedef struct Node { int coef;//系数 int exp;//指数 struct Node *next; }PolyNode; PolyNode *Cr ...
- 数据结构与算法-实验1-多项式的计算:合并同类项、升幂排序、多项式加法、减法、乘法
#include<stdio.h> #include<stdlib.h> #include<malloc.h> using namespace std; //多项式 ...
- 数据结构——多项式的加减乘法以及合并同类项的算法
测试数据(这里只测试了一组数据,小伙伴们可以自行测试其他数据喔) 2 2 3 3 4 4 0 0 1 2 2 2 0 0 1 2 1 1 0 0 1 2 1 3 0 0 -1 2 -5 3 -4 2 ...
- 一元多项式 java_java链表实现一元多项式的合并同类项以及加法
上课的作业:利用java数据结构的知识表示一元多项式,以及实现一元多项式的加法运算以及合并同类项 链表节点类: package PloyItem; public class Lnode impleme ...
- java链表实现一元多项式的合并同类项以及加法
上课的作业:利用java数据结构的知识表示一元多项式,以及实现一元多项式的加法运算以及合并同类项 链表节点类: package PloyItem;public class Lnode implemen ...
- matlab按照z合并同类项,matlab合并同类项
(表达式) 9 合并同类项 syms 表达式中包含的变量 collect(表达式... ('nthnumer','cfe',8),x); % 分子多项式合并同类项 d=collect(maple('n ...
最新文章
- NOIP2018 退役记
- 计算机视觉与深度学习 | 使用K均值聚类实现基于颜色的分割(matlab版)
- Python爬取网站用户手机号_利用python爬取慕课网站上面课程
- ListElement QML类型
- 高可用的eureka
- 汇编学习笔记(二)--数据处理的两个基本问题
- Conway#39;s law(康威定律)
- 【Python开发】Python 适合大数据量的处理吗?
- C10K 非阻塞 Web 服务器
- css布局方式_收藏!40 个 CSS 布局技巧
- nio和bio的原理_Java的BIO,NIO和AIO的区别于演进
- 机器人局部避障的动态窗口法(dynamic window approach)
- linux 修改ip地址 和关闭防火墙设置
- 一键获取阿里巴巴主图视频细节图评论图的步骤
- 常见的分布期望及其方差
- 【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码
- linux运行酷q,Linux通过docker安装运行酷Q--用QQ骰子君进行跑团
- 药明康德2020年营业收入165.35亿元,同比增长28.5%
- 交互设计师成长指引-从平凡到卓越
- BZOJ 1911 (APIO 2010) 特别行动队
热门文章
- 微信网页发红包服务器卡住,「」实用技巧:微信红包“发放失败,此请求可能存在风险,已被微信拦截”的解决办法...
- PanDownload 一款好用的百度网盘下载工具 突破下载网速限制
- 瑞芯微RV1126平台----yolov5输出后处理C++实现
- 过夫妻生活:50岁男人比30岁时更有魅力
- lodash-difference理解
- 微信开发之扫码开票解决方案
- GSM/CDMA/固定电话,呼叫等待,呼叫转移
- 虚拟机ping不通网关之大坑
- 利用turtle绘制五角星
- 【模拟电子技术Analog Electronics Technology 4】——晶体三极管工作原理及放大作用详解