多项式相乘(链表实现)
来源:互联网 发布:2016网络春晚 编辑:程序博客网 时间:2024/04/30 03:46
直接上代码,一个晚上的成果
/******************************************************************多项式乘法链表实现*******************************************************************************/#define LIST_OK 1#define LIST_FAIL 0typedef struct node{ int coef; //系数 int power; //次数 struct node *next;}list;/*****链表初始化,实际就是创建一个头结点(不存储数值)****/int init_list(list **p){ if( NULL!=*p ) //传递过来一个空指针 { printf("链表初始化失败!\n"); return LIST_FAIL; } *p=(list*)malloc( sizeof(list) ); if( NULL==*p ) { printf("分配内存出错!\n"); return LIST_FAIL; } (*p)->next=NULL; //关键的一句 printf("链表初始化完毕!\n"); return LIST_OK;} /*********输入(添加)一个结点**************/int insert_node(list *p,list *node){ if( NULL==p ) { printf("链表还没有初始化,无法插入节点!\n"); return LIST_ERROR; } while( NULL!=p->next ) { p=p->next; } p->next=(List*)malloc(sizeof(List)); if( NULL==p ) { printf("分配内存出错!\n"); return LIST_FAIL; } p=p->next; p=(list*)malloc( sizeof(list) ); p->coef=node->coef; p->power=node->power; p->next=NULL; printf("添加节点成功!\n"); return LIST_OK; } /*************降幂排序*****************/void sort_list(list **head){ list *p; list *q; int a,b; for(p=head->next;p->next!=NULL;p=p->next){ //同冒泡排序 for(q=head->next;q->next!=NULL;q=q->next) { if(q->power<q->next->power){ a=q->power; b=q->coef; q->coef=q->next->coef; q->power=q->next->power; q->next->coef=a; q->next->power=b; } } }}/***********合并同类项*****************//***********合并即free*****************/void union_poly(list *head){ list *p; list *q; list *last; list *tmp; for(p=head->next;p->next!=NULL;p=p->next){ last=p; for(q=p->next;q!=NULL; ){ if(q->power==p->power){ p->power+=q->power; tmp=q->next; free(q); last->next=tmp; q=tmp; //q指针向后推移指向下一结点 } else{ last=q; q=q->next; } } }} /*******dest和src分别是两个待乘的多项式********/int mul_poly(list **dest,list **src){ list data; list *pNew=NULL; init_list(&pNew); //链表初始化,实际就是创建一个头结点 list *head1=*dest; list *head2=*src; while((*dest=(*dest)->next)!=NULL){ while((*src=*src->next)!=NULL){ data.coef=(*dest)->coef * (*src)->coef; data.power=(*dest)->power + (*src)->power; data.next=NULL; insert_node(pNew,&data); } *src=head2; } sort_list(pNew); //次数降幂排序,并合并同类项 union_poly(pNew); *dest=pNew; return LIST_OK;}
0 0
- 多项式相乘(链表实现)
- 链表实现的多项式相加相乘
- 链表实现多项式相加 相乘
- 两个一元多项式相乘,数组与链表实现
- 使用链表实现两个多项式相加和相乘
- 多项式相乘求组合数RC(n,r)——链表实现
- 用链表实现多项式相乘
- 用单链表实现多项式相乘
- 单向链表 练习3.7 多项式相乘
- 实现多项式相乘的程序
- 实现多项式相乘的程序
- 数据结构(14)线性表之C++实现一元多项式相乘
- 线性表 和 多项式相乘
- [线性表]一元多项式相乘
- 多项式相乘(C语言)
- 多项式相乘问题(模拟)
- 多项式相乘(conv.cpp)
- 一元多项式相乘 - 链表的简单应用
- 项目5
- SIFT特征提取-应用篇
- [ASP.NET MVC 小牛之路]18 - Web API
- 微软面试题:飞机加油问题(智商被压制的节奏,好精妙)
- 从头认识C—变量的取地址操作
- 多项式相乘(链表实现)
- Matlab 线性拟合 & 非线性拟合
- 第十六周 oj平台 相同的数字
- Codec Engine Algorithm Creator User’s Guide
- Java 理论与实践: 动态编译与性能测量
- 从头认识C—指针的一些知识点
- 第十六周 oj平台 指针引出奇数因子
- Think In Java Chapter 18 IO系统 练习17 计算文件中字符出现次数
- VS之多态虚函数的实现