数据结构入门学习系列-6(链表合并与多项式合并算法)
来源:互联网 发布:c语言的开发环境 编辑:程序博客网 时间:2024/05/16 07:07
由之前对单链表的熟悉,本文章结合一个经典例子总结一下,即合并有序的单链表,如图所示:
将La,Lb合并生成新的单链表Lc。基本思路如下:
将La赋值给Lc然后对比La的第一个元素和Lb的第一个元素,对比之后,开始钩链的过程。最终对比完成之后,生成Lc链表,删除Lb链表。同时记得在出现相同值得情况下,删掉一个元素,释放内存。先看一下链接了两个链表第一个元素的情况:
这个时候La的第一个元素Pa和Lb的第一个元素Pb已经对比完成,并进行链接。Pa和Pb分别后移,Pc指向链接完成的最后一个元素。
具体流程看代码:
//链表合并LNode *Merge_Link(LNode *La, LNode *Lb){ LNode *Pa, *Pb, *Lc, *Pc, *tmp; Pa = La->next; Pb = Lb->next; Lc = La; Pc = La; while(Pa != NULL && Pb !=NULL) { if(Pa->data < Pb->data){ Pc->next = Pa;//Pc的头结点与Pa相连 Pc = Pa; //Pc移到Pa的位置 Pa = Pa->next;//Pa后移一位 } else if(Pa->data > Pb->data) { Pc->next = Pb;//Pc的头结点与Pb相连 Pc =Pb; //Pc移到Pb的位置 Pb = Pb->next; //Pb后移一位 } else if(Pa->data == Pb->data) { Pc->next = Pa;//Pc的头结点与Pa相连 Pc = Pa;//pc移动到Pa的位置 Pa = Pa->next;//Pa后移一位 tmp = Pb;//删掉Pb Pb = Pb->next; free(tmp); } } //链接剩余的节点 if(Pa != NULL) Pc->next = Pa; else Pc->next = Pb; free(Lb); return Lc;}
来看下一个经典例子,多项式合并:
由题目可以知道,两个多项式合并无非就是质数相同的项系数相加,合并为一项。
因此链表结构定义如下:
//多项式的合并typedef struct Ploy { float copf;//系数 int expn;//指数 struct Ploy *next;}基本思路就是上面的两个链表合并的算法,具体参考程序如下:
//La多项式,Lb多项式合并为Lc多项式Ploy *add_ploy(Play *La, Ploy *Lb){ Ploy *Lc, *Pa, *Pb, *Pc, *ptr; float x; Lc = Pc =La; Pa = La->next; Pb = Lb->next; while(Pa!=NULL && Pb!=NULL) { if(Pa->expn > Pb->expn) {//pa的指数比pb大,那么就把pb后移 Pc->next = Pb; Pc = Pb; Pb = Pb->next; } else if(Pa->expn < Pb->expn) {//pa的指数比pb小,那么就把pa后移 Pc->next = Pa; Pc =Pa; Pa = Pa->next; } else {//两个指数相等,那么就把系数相加 x = Pa->conf+Pb->conf; if(abs(x)<10e-6){//系数相加为0,就删掉 pa = ptr; pa->next = pa; free(ptr); ptr = pb; pb->next=Pb; free(ptr); } else {//系数相加不是0,就合并 pc->next = pa; pa->conf = x; pc = pa; pa = pa->next; ptr = pb; pb = pb->next; free(ptr); } } } if(pa == NULL) pc->next = pb; else pc->next = pa; return Lc;}
阅读全文
0 0
- 数据结构入门学习系列-6(链表合并与多项式合并算法)
- 双链表&链表合并&多项式相加算法
- 数据结构与算法(二)合并两个有序链表
- 数据结构 多项式的合并
- 数据结构与算法-实验1-多项式的计算:合并同类项、升幂排序、多项式加法、减法、乘法
- 算法与数据结构--实现线性表的合并操作(合并后按非递减排列)--算法2.6
- 新手学习数据结构与算法---链表多项式
- 数据结构算法2.2 链表的合并
- 数据结构之链表合并算法
- 数据结构 链表合并
- 多项式链表-算法设计与数据结构
- 浅析数据结构与算法3--合并排序
- 数据结构与算法分析笔记与总结(java实现)--链表4:单调链表合并问题
- 数据结构实验2 一元多项式的合并
- [c/c++练习系列]多项式合并问题
- 链表合并算法
- 链表合并算法
- 算法链表合并
- 周鸿祎回应“踏空论”:智能硬件过去的思路是错误的
- linux下的find文件查找命令与grep文件内容查找命令
- 本机关联域名
- 消息中间件kafka+zookeeper集群部署、测试与应用
- android与本地tomcat的通信,实现登录功能
- 数据结构入门学习系列-6(链表合并与多项式合并算法)
- BeanUtils.copyProperties()笔记
- Linux常用命令之grep
- 讯飞语音:组件未安装(错误码21002)
- Linux命令(压缩,解压tar)
- 占据ADAS市场75%的份额,Mobileye是如何做到的?
- 奥兰多枪击案发生后让你五分钟报平安的Safety Check是怎么实现的?
- IEEE数字感知主席:VR迎来了第二春,但技术仍很多空白
- muduo网络库学习(八)事件驱动循环线程池EventLoopThreadPool