云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 一元多项式计算(数据结构课程设计)

一元多项式计算(数据结构课程设计)

  • 62 次阅读
  • 3 次下载
  • 2026/4/30 7:31:49

(2)一元多项式计算算法用类C语言表示:

Typedef struct00{ //项的表示,多项式的项作为LinkList的数据元素 Float coef; //细数 Int expn;//指数

}term,ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名

Typedef LinkList polynomial: //用带表头的节点的有序链表表示多项式 //基本操作的函数原型说明

Void CreatePolyn(polynomail&P);

//输入n的系数和指数,建立表示一元多项式的有序链表P 销毁一元多项式P Void DestroyPolyn(polynomailP); 销毁一元多项式P

voidPrintPoly(polynomail P); //打印输入一元多项式P

IntPolynLength(polynnomail P); //返回一元多项式P中的项数

void CreatPolyn(polynomail&Pa.polunomail&Pb);

//完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式Pb voidSubtractPolyn(polunomail&Papolunomail&Pb);

//完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb //基本操作的算法描述 Int cmp(tem a,temp b); //依a的指数值<(或=)(或>b的住数值,分别返回-1、0和+1 Void CreatePolyn(polynomail&P,int m){

//输入m项的系数和指数,建立表示一元多项式的有序链表P InitList(P); h=GetHead(P);

E.coef=0.0; e.expn=-1; SerCurElem(h,e);//设置头结点的数据元素 For (i=1;i<=m;++i) { //依次输入m个非零项 Scanf(e.coef,e.epn);

If(!LocateElem(P,e,q,(*cmp)())) {//当前链表中不存在该指数项 If(MakeNode(s,e)) InsFirst(q,s); //生成节点并插入链表 } }

}//CreatPolun

三、 详细设计

1、算法实现

(1)输入一元多项式函数:

void shuchu(pnode *head) {

pnode *p;

int one_time=1;

p=head;

while(p!=NULL) /*如果不为空*/ {

if(one_time==1) {

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/

printf(\如果系数是正的话前面就要加+号*/ else if(p->xishu==1||p->xishu==-1)

printf(\如果系数是1的话就直接输出+x*/ /*如果系数是-1的话就直接输出-x号*/

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf(\

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf(\ one_time=0; } else{

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/ {

if(p->xishu>0)

printf(\如果系数是正的话前面就要加+号*/ }

else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/ printf(\

else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/ printf(\

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf(\

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/

printf(\ }

p=p->next; /*指向下一个指针*/ }

printf(\ }

(2)加法函数

/*两个多项式的加法运算*/

pnode * add(pnode *heada,pnode *headb) {

pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/ float x; /*x为系数的求和*/

p=heada; /*指向第一个多项式的头*/ q=headb; /*指向第二个多项式的头*/

headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/ r=headc;

while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/ {

if(p->zhishu==q->zhishu) /*指数相等的话*/ {

x=p->xishu+q->xishu; /*系数就应该相加*/ if(x!=0) /*相加的和不为0的话*/ {

s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/ s->xishu=x;

s->zhishu=p->zhishu; r->next=s; r=s; }

q=q->next;p=p->next; /*2个多项式都向右移*/ }

else if(p->zhishuzhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/ {

s=(pnode *)malloc(sizeof(pnode)); s->xishu=q->xishu; s->zhishu=q->zhishu;

r->next=s; r=s;

q=q->next; /*q向右移动*/ }

else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/ {

s=(pnode *)malloc(sizeof(pnode)); s->xishu=p->xishu; s->zhishu=p->zhishu; r->next=s; r=s;

p=p->next; /*p向右移动*/ } }

/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL) {

s=(pnode *)malloc(sizeof(pnode)); s->xishu=p->xishu; s->zhishu=p->zhishu; r->next=s; r=s;

p=p->next; }

/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL) {

s=(pnode *)malloc(sizeof(pnode)); s->xishu=q->xishu; s->zhishu=q->zhishu; r->next=s; r=s;

q=q->next; }

r->next=NULL; /*最后指向空*/

headc=headc->next; /*第一个头没有用到*/ return headc; /*返回头接点*/ }

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(2)一元多项式计算算法用类C语言表示: Typedef struct00{ //项的表示,多项式的项作为LinkList的数据元素 Float coef; //细数 Int expn;//指数 }term,ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名 Typedef LinkList polynomial: //用带表头的节点的有序链表表示多项式 //基本操作的函数原型说明 Void CreatePolyn(polynomail&P); //输入n的系数和指数,建立表示一元多项式的有序链表P 销毁一元多项式P Void DestroyPolyn(polynomailP); 销毁一元多项式P voidPrintPoly(polyno

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com