f(X)=1+x+x2+x5

g(X)=x3+x6+x8+x100

f(X)+g(X)=1+x+x2+x3+x5+x6+x8+x100

两个有序多项式相加合并问题:

显然第一个想到的是用数组解决,可仔细想一想,数组有诸多弊端,比如大量空间浪费,无法同时存储系数和指数(当然可以用结构体数组,但那不还是链表吗),插入删除都需移动大量数据,索性,就用单链表解决吧

思路如下:

1)将f(X)和g(X)分别存储在两个单向链表内,每个节点存储多项式的一项,内含系数和指数,并指向下一项节点,连贯成一个多项式,头结点分别是head1,和head2;

2)接下来就是两个多项式合并同类项了(初中貌似最喜欢做这玩意了,可计算机可不如你啊),用Node *p1=head->next; 指向f(X)的第一个项节点(head节点均为无数据的表头),

Node *p2=head->next;指向g(X)的的一项; 在定义两个指针pre1=head1、pre2=head2(一会儿有用),准备工作基本做完了。

3)此算法的关键在于将两个有序链表合并成一个,并依然有序;只需将f(X)看成主串,g(X)看成插入串即可,遍历g(X)的各节点,比较其与f(X)各节点指数的大小,小的就插在前面,大的话指针p1就往后移,相等就合并,如果f(X)先遍历到结尾,说明g(X)的其余项都比f(X)的最后一项的指数大,只需将f(X)的最后一个节点指向g(x)的剩余节点即可,最后别忘了把head2删了,因为它是个没有数据的节点。

好了还是上代码吧:

#include<iostream>
using namespace std;

typedef struct node
{
    int coe;     //系数
    int exp;     //指数
    struct node *next;
}Node;
/生成链表
Node *Create()
{
    Node *head=new Node;
    head->next=NULL;
    Node *p=head;
    int n;           //项数
    cout<<"N:";
    cin>>n;
    for(int i=0;i<n;i++)
    {
      p->next=new Node ;
      p=p->next;
      cin>>p->coe>>p->exp;
      p->next=NULL;

}
    return head;
}

int main()
{
    Node *head1=Create();
    Node *head2=Create();
    Node *p1=head1->next,*p2=head2->next;
    Node *pre1=head1,*pre2=head2;     //pre1指针用来指向比较节点的前一个节点
                                      //pre2指针用作temp
    while(p1 && p2)
    {
        if(p1->exp < p2->exp)
        {
            pre1=p1;
            p1=p1->next;
        }
        else if(p1->exp > p2->exp)
        {
            pre1->next=p2;
            pre2=p2->next;
            p2->next=p1;
            p2=pre2;
            pre1=pre1->next;
        }
        else if(p1->exp == p2->exp)
        {
            p1->coe+=p2->coe;
            pre2=p2;
            p2=p2->next;
            delete pre2;
        }

}
    if(p1==NULL)
    {
       pre1->next=p2;
    }
    delete head2;
   Node *temp=head1->next;
   while(temp)
   {
      cout<<temp->coe<<'X'<<'('<<temp->exp<<')'<<" ";
      temp=temp->next;
    }
    return 0;

}

转载于:https://www.cnblogs.com/gavindlutsw/archive/2011/09/24/2189784.html

链表应用——多项式相加相关推荐

  1. 链表应用 多项式相加

     用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 ...

  2. 【数据结构笔记07】不带头结点链表实现多项式相加、相乘

    本次笔记内容: 2.4 多项式的加减运算实现 P24 1.题意理解与多项式表示 P25 2.程序框架及读入多项式 P26 3.加法.乘法运算及多项式输出 文章目录 多项式加法运算 采用不带头结点的单项 ...

  3. 数据结构(Java):用单链表实现多项式相加

    要求: 1.已知有两个多项式Pn(x)和Qm(x),并且在Pn(x)和Qm(x)中指数相差很多,设计算法,求Pn(x)+Qm(x) 2.进行加法运算时不重新开辟存储空间. //定义节点类 class ...

  4. MFC版链表实现稀疏多项式相加减

    链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...

  5. 数据结构C语言描述——用单链表实现多项式的相加

    #include <stdio.h> #include <stdlib.h>typedef DataType; typedef struct Node2{DataType xi ...

  6. 基础数据结构【四】————环形链表与多项式

    主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...

  7. 多项式加法 java 链表_多项式加法,用单链表实现。

    ---恢复内容开始--- #include #include typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//系数 i ...

  8. 用c语言链表编写便利店零售系统,链表实现多项式求和(C语言)

    链表实现多项式求和(C语言)0 aebgt2013.06.26浏览270次分享举报 1 多项式求和中两个链表合并问题,请各位大侠帮忙啊 #include #include typedef struct ...

  9. 【数据结构】C++单链表实现多项式加法(直接输入多项式)

    题目描述: 计算两个多项式的和. 输入: 输入有两行,每行为一个每项按照指数从大到小顺序的多项式,多项式的每一项用mx^n表示,其中系数m为非0整数,指数n是非负整数. 输出: 输出两个多项式相加的结 ...

最新文章

  1. 从RocketMQ看长轮询(Long Polling)
  2. CSP-S初赛知识点复习(全)
  3. vs中html如何设计分页_如何在电路设计中使用负载线(Load Line)?
  4. linux课堂笔记(6)
  5. boost库 bind/function的使用
  6. word根据目录切块php,PHP导出Word文档如何自定义目录?
  7. 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
  8. tensorflow2 目标检测_BJX 系列 小型远距离检测型光电传感器代理报价
  9. python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并
  10. matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
  11. 报错Takes no arguements解决办法
  12. git hub寻找资源
  13. Ansible企业运维实例(三)—批量硬盘初始化
  14. 几倍根号用学生计算机,几倍根号几怎么算不要网上抄的 祥细的 例如2√2 3√3 4√4 怎么算...
  15. 如何找到微信公众号的视频链接及视频?
  16. aws ec2时间_Amazon EC2
  17. 关于Elastic、关于Elasticsearch教程
  18. 从另一个角度看汉芯事件
  19. iOS仿UC浏览器顶部频道滚动效果
  20. 机器学习(二) 学习规划及资料汇总

热门文章

  1. nginx下使用asan和valgrind两个静态检查工具
  2. libxml2中文支持
  3. python学习笔记(十)标准库pprint
  4. dojo中的dojo/dom-construct
  5. Java多线程编程-(4)-线程间通信机制的介绍与使用
  6. fastjson Features 说明
  7. java多线程系列:通过对战游戏学习CyclicBarrier
  8. 机器学习算法Python实现:kmeans文本聚类
  9. 2019第一篇万字长文!30+家一线投资机构已出投资新策略...
  10. Unity 3D观察者设计模式-C#委托和事件的运用