ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17.64KB ,
资源ID:27658567      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27658567.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多项式运算与链表.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

多项式运算与链表.docx

1、多项式运算与链表#include#include#include/首先要构造多项式的数据结构struct duoxiangshi char ch;/变量名 float coef;/系数 coefficient int expo; /指数 exponent struct duoxiangshi *next;/初始化一个链表duoxiangshi * initlink() duoxiangshi *p; p=(duoxiangshi*)malloc(sizeof(duoxiangshi); /如果申请内存空间失败 if(p=NULL) printf(申请空间失败); exit(0); p-next

2、=NULL; return p;/销毁整个链表void destroy_link(duoxiangshi *p) duoxiangshi *q; while(p!=NULL) q=p; p=p-next; free(q); /将多项式存入链表中duoxiangshi * creat_ploy(duoxiangshi *p) char c1; int i=0,n=0; duoxiangshi *p1; p=initlink(); printf(输入变量名:n); scanf(%s,c); printf(输入多项式项数n); scanf(%d,&n); for(i=0;icoef); printf

3、(输入变量的指数:n); scanf(%d,&p1-expo); p1-ch=c0; p1-next=p-next; p-next=p1; return p; /删除节点 返回剩下的链表首地址duoxiangshi * deletenode(duoxiangshi *h,duoxiangshi *maxp) duoxiangshi *t; t=h; /找到要删除的节点的前节点 while(t-next!=maxp) t=t-next; /删除节点 t-next=maxp-next; maxp-next=NULL; return h;/求表长 a用来记录长度void link_length(du

4、oxiangshi *p,int &a) while(p-next!=NULL) p=p-next; a+; /将链表中的多项式的指数的大小排序duoxiangshi *sort(duoxiangshi *h) int min;/用于保存指数最小的值 duoxiangshi *t=NULL,*minp=NULL,*head=NULL; if(h-next=NULL) printf(链表中不存在数据n); exit(0); /链表排序的思想和冒泡排序差不多,需要临时变量来存在当前最小值 while(h-next!=NULL) t=h-next;/临时指针 min=t-expo;/临时最小的指数值

5、 minp=t;/把当前t中的值作为最小 while(t-next!=NULL)/如果t后面有节点就需要比较 t=t-next;/向后移动一位 当前最小比较 if(t-expoexpo;/每次记录最小的 minp=t; h=deletenode(h,minp);/删除保存最小的指数的节点 返回剩余的 minp-next=head;/将每次的最小节点接在头结点之前 head=minp;/head重新回到该链开头 h-next=head;/把head接在头结点之后 return h;/显示多项式void display_poly(duoxiangshi *p) int a; p=sort(p);/

6、排序 while(p-next!=NULL) a=1; p=p-next; if(p-coefcoef, p-ch, p-expo); printf(n); /查找指数为index的节点duoxiangshi *locate_link(duoxiangshi *p, int index) p = p-next; while(p != NULL & p-expo != index) p = p-next; if(p = NULL) return NULL; else return p;/多一元多项式求导duoxiangshi *poly_qiudao(duoxiangshi *p) duoxia

7、ngshi *n,*q; q=p; if(p-next=NULL) printf(链表中没有数据n); exit(0); while(p-next!=NULL) p=p-next; if(p-expo=0|p-coef=0) q=deletenode(q,p); n=q;/保存删除无用节点的链表之后的头结点, 用于返回 /有可能删除后就没有数据了 if(q-next=NULL) printf(链表中没有数据n); exit(0); while(q-next!=NULL) q=q-next; /求导特点 q-coef=q-coef*q-expo; q-expo=q-expo-1; return

8、n;/创建多项式void creat(duoxiangshi *&p1,duoxiangshi *&p2) printf(创建第一个多项式n); p1=creat_ploy(p1); /创建多项式 printf(创建第二个多项式n); p2=creat_ploy(p2);/创建多项式 printf(第一个多项式 :n); display_poly(p1); printf(第二个多项式 :n); display_poly(p2);/多项式相加duoxiangshi * poly_add(duoxiangshi *head1,duoxiangshi *head2,char a) char ch1;

9、 duoxiangshi *p1,*p2,*p,*r; p1=head1; p2=head2; if(a=+) /只能是多项式的加法可以使用 system(cls); creat(p1,p2);/创建p1,p2 r=p1; while(r-next!=NULL) p1=r-next; r=deletenode(r,p1); /删除p1 p=locate_link(p2,p1-expo);/查找p2中是否有 系数等于p1-expn的节点,有就返回该点,否则返回NULL if(p!=NULL) p-coef=p-coef+p1-coef; else p1-next=p2-next; p2-next

10、=p1; if(a=+) printf(多项式相加后的结果是:n); display_poly(p2); printf(需要知道多项式求导后的结果吗?:Y/Nn); scanf(%s, ch); /继续创建 if(ch0 = Y | ch0 = y) p2=poly_qiudao(p2); display_poly(p2);/显示p2 destroy_link(p2); /销毁链表 /不继续进行 else destroy_link(p2); /销毁链表 getchar();/吃掉输入的字符,让屏幕显示停在运算结果上 return NULL; return p2; /多项式相减 可以重用多项式相

11、加 只是变了符号 void poly_sub(duoxiangshi *p1,duoxiangshi *p2) char ch1; duoxiangshi *n,*p; system(cls); /清屏 creat(p1,p2); p=p2; /将后面的多项式全部相当于乘以-1 while(p-next!=NULL) p=p-next; p-coef=-1*p-coef; printf(多项式的相减结果是:n); n=poly_add(p1,p2,-); display_poly(n); printf(需要知道多项式求导后的结果吗?:Y/Nn); scanf(%s, ch); if( ch0

12、= Y | ch0 = y) n = poly_qiudao(n); /求导 display_poly(n); destroy_link(n); /销毁 else destroy_link(n); getchar(); /多项式相乘的其中一个重用方法 duoxiangshi * poly_multiply(duoxiangshi *p,float coef,int index) / 传入系数和指数,分别与p的每个节点运算 最后返回该链 duoxiangshi *q,*n; n = (duoxiangshi *)malloc(sizeof(duoxiangshi); /作为头节点 n-next

13、= NULL; while(p-next!=NULL) p = p-next; q = (duoxiangshi *)malloc(sizeof(duoxiangshi); q-ch = p-ch; q-coef=coef*p-coef; q-expo=index+p-expo; q-next=n-next; n-next=q; return n; /多项式相乘 重用所用方法 void run_mul(duoxiangshi *p1,duoxiangshi *p2,int num) int i=0; char ch1; duoxiangshi *p,*q; /二维指针存每次poly_multi

14、ply()函数返回的链表 p=(duoxiangshi*)malloc(num*sizeof(duoxiangshi); /从p1的第一项开始依次乘以p2的每一项 while(p1-next!=NULL) p1=p1-next; pi+=poly_multiply(p2,p1-coef,p1-expo); q=poly_add(p0,p1,*); for(i=2;i= num1) /*根据链表*/ run_mul(p1, p2, num1); else run_mul(p2, p1, num2); /选择函数 int select() printf(输入任何字符进入主菜单n); getchar

15、();/读入字符 但不显示 system(cls); /*清屏*/ printf(选择多项式的操作nn); printf(#n); printf(1.多项式相加n); printf(2.多项式相减n); printf(3.多项式相乘n); printf(4. 退出n); printf(#n); int n=0; do printf(输入你的选择n); scanf(%d,&n); while(n4);/如果操作不对则一直循环 return n; int main() duoxiangshi *head1=NULL; duoxiangshi *head2=NULL; duoxiangshi *head3=NULL; /无限次死循环 for(;) switch(select() case 1: head3=poly_add(head1, head2, +); break; case 2: poly_sub(head1, head2); break; case 3: poly_mul(head1, head2); break; case 4: exit(0); /退出 return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1