第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/6/29 5:26:38 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

(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; /*返回头接点*/ }

一元多项式计算(数据结构课程设计).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6zz164whef58u602wq4y_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top