⼀元多项式相加可实现代码数据结构(C语⾔)⼀元多项式相加可实现代码(c语⾔)sql软件长什么样
《数据结构》(C语⾔版)书上是伪代码,经过不断修改调试,写下可实现的C语⾔源代码。
创建⽂件,分为两部分:头⽂件(Poly.h)和源⽂件(Poly.c)
⼀、实验⽬的
1、了解⼀元多项式的表⽰。
script标签是什么意思2、实现⼀元多项式的相加
⼆、实验器材
1、Visual Studio 2019开发环境;
注:开发环境不同,会有细节区分,根据开发环境的不同来调试。
(Visual Studio 2019需要我把 scanf 改为 scanf_s 才可运⾏)
三、实验内容
1. 问题描述
输⼊两个⼀元多项式,实现两个⼀元多项式的相加,并且按降幂排序表⽰
2. 结构定义(头⽂件)
//Poly.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2elect是什么意思
#define LIST_INIT_SIZE 100
typedef int Status;
struct node {//项结点
float coef;//系数
int expn;//指数
};
//结构体定义
typedef struct Polynomial {
struct node elem;
struct Polynomial* next;
}*PolyList;
//函数声明
void CreatePolyn(PolyList* ha,int n);
void ShowSqList(PolyList ha);
void SortPolyn(PolyList head,int n);
PolyList add(PolyList ha, PolyList hb);
3.源代码
//Poly.c
#include<stdio.h>
#include<stdlib.h>
#include"Poly.h"
#include"malloc.h"
//创建⼀元多项式链表
void CreatePolyn(PolyList* ha,int n)
{
float coe;
int exp;
PolyList p;//创建临时多项式链表
*ha =NULL;//⾸先为空时ha指向空
while(n--){
while(n--){
scanf_s("%f%d",&coe,&exp);
p =(PolyList)malloc(sizeof(struct Polynomial));
p-&f = coe;
p-&pn = exp;
p->next =*ha;
*ha = p;
}
}
//输出⼀元多项式
void ShowSqList(PolyList ha)
{
if(ha ==NULL)
printf("F(x)=0");
else
{
printf("多项式F(x)=%.0fX^(%d)", ha-&f, ha-&pn); ha = ha->next;
while(ha !=NULL)
{
if(ha-&f >0)
printf("+");
printf("%.0fX^(%d)", ha-&f, ha-&pn);
ha = ha->next;
}
}
printf("\n");
}
//冒泡排序链表
void SortPolyn(PolyList head,int n)
{
int i, j;
struct node temp;
PolyList p1, p2;
for(p1 = head, i =0;i < n -1;i++, p1 = p1->next)
for(p2 = p1->next, j =0;j < n - i -1;j++, p2 = p2->next)
if(p1-&pn < p2-&pn)//按指数从⼤到⼩排序
{
temp = p2->elem;
p2->elem = p1->elem;
p1->elem = temp;
}
}
//多项式相加
PolyList add(PolyList ha, PolyList hb)
{
int t =0;
int polynsize =0;
PolyList p, hc =NULL;
while(ha && hb)
{
if(ha-&pn == hb-&pn)
{//两指数相同时,系数相加
t = ha-&f + hb-&f;
if(t)
{//系数和不为零,则插⼊和多项式hc链表中
p =(PolyList)malloc(sizeof(struct Polynomial));
p-&f = t;
p-&pn = ha-&pn;
p->next = hc;
hc = p;
ha = ha->next;
ha = ha->next;
hb = hb->next;
polynsize++;
}
冒泡排序代码c语言else
{//系数和为零,则ha、hb结点后移
ha = ha->next;
hb = hb->next;
}
}
else if(ha-&pn > hb-&pn)
{//ha的指数⼤则先⾏插⼊hc
p =(PolyList)malloc(sizeof(struct Polynomial)); p->elem = ha->elem;
p->next = hc;
hc = p;
ha = ha->next;
polynsize++;
}
else
{//hb的指数⼤则先⾏插⼊hc
p =(PolyList)malloc(sizeof(struct Polynomial)); p->elem = hb->elem;
p->next = hc;
hc = p;
hb = hb->next;
polynsize++;0基础python从入门到精通
}
}
while(ha)
{//ha不为空,则将当前ha剩余项全部插⼊hc
p =(PolyList)malloc(sizeof(struct Polynomial)); p->elem = ha->elem;
p->next = hc;
hc = p;
ha = ha->next;
polynsize++;
}
while(hb)
{//hb不为空,则将当前hb剩余项全部插⼊hc
p =(PolyList)malloc(sizeof(struct Polynomial)); p->elem = hb->elem;
p->next = hc;
hc = p;
hb = hb->next;
polynsize++;
}
SortPolyn(hc, polynsize);//排序hc
return hc;
}
int main()
{
PolyList ha, hb, hc;//多项式ha,hb,hc
int m, n;//多项式ha,hb的项数
scanf_s("%d",&m);
CreatePolyn(&ha, m);//输⼊并创建ha
scanf_s("%d",&n);
CreatePolyn(&hb, n);//输⼊并创建hb
printf("\n");
printf("原始两个多项式\n");
ShowSqList(ha);
ShowSqList(hb);osi七层模型与tcp ip四层对应关系
printf("\n");
SortPolyn(ha, m);
SortPolyn(hb, n);
printf("按指数从⾼到低排序后两个多项式\n"); ShowSqList(ha);
ShowSqList(hb);
printf("\n");
hc =add(ha, hb);
printf("和多项式\n");
ShowSqList(hc);//输出和多项式hc return0;
}
/*测试数据(随便输)
第⼀⾏ha的项数
第⼆⾏为第i项对应系数与指数,i++,i从1开始
第三⾏hb的项数
第四⾏为第i项对应系数与指数,i++,i从1开始
3
1 3
2 2 4 1
4
2 2 5 1 -1
3 6 6
*/
实现效果:
有问题欢迎留⾔共同探讨
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论