IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    实现两个指数递减多项式的和与积

    summer发表于 2016-10-31 04:00:40
    love 0

    有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。

    【提示】 用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入、删除操作中指针的正确修改。

     

     

    #include<iostream>
    #include
    <cmath>
    using namespace std;

    /**
    数据结构习题1
    多项式的相加和相乘
    @刘辉
    *
    */
    struct Node{
    int data;
    int index;
    Node
    * next;
    };
    Node
    *insertList(Node* head,Node* p); //插入链表
    Node *createList(); //创建链表
    void printList(Node *head); //打印链表
    Node *addList(Node *p1,Node *p2); //实现加法运算

    Node
    *createList()
    {
    int index,data;
    Node
    *p,*head,*q;
    head
    = new Node;
    p
    = head;
    cout
    <<"请输入要输入的多项式a的幂指数:";
    cin
    >>index;
    cout
    <<"请输入该指数的参数:";
    cin
    >>data;
    while(index!=0)
    {
    q
    = new Node;
    q
    ->index = index;
    q
    ->data = data;
    p
    ->next = q;
    p
    = q;
    cout
    <<"请输入要输入的多项式a的幂指数:";
    cin
    >>index;
    cout
    <<"请输入该指数的参数:";
    cin
    >>data;
    }
    p
    ->next = NULL;
    return head;
    }
    //多项式相加
    Node *addList(Node *p1,Node *p2)
    {
    int add;
    Node
    *temp,*head,*p3;
    p1
    = p1->next;
    p2
    = p2->next;
    head
    = temp = new Node;
    head
    ->next = NULL;
    while(p1&&p2)
    {

    if(p1->index==p2->index)
    {
    add
    = p2->data + p1->data;
    if(add!=0)
    {
    p3
    = new Node;
    p3
    ->index = p2->index;
    p3
    ->data = add;
    p3
    ->next = NULL;
    }
    p1
    = p1->next;
    p2
    = p2->next;
    }
    else if(p1->index<p2->index)
    {
    p3
    = new Node;
    p3
    ->data = p2->data;
    p3
    ->index = p2->index;
    p3
    ->next = NULL;
    p2
    = p2->next;

    }
    else
    {
    p3
    = new Node;
    p3
    ->data = p1->data;
    p3
    ->index = p1->index;
    p3
    ->next = NULL;
    p1
    = p1->next;

    }
    if(head->next ==NULL)
    {
    head
    ->next = p3;
    temp
    = p3;
    }
    else
    {
    temp
    ->next = p3;
    temp
    = p3;
    }
    }
    temp
    ->next = p1?p1:p2;
    return head;

    }

    //多项式相乘
    Node* mulList(Node *p1,Node *p2)
    {
    Node
    *head,*temp,*s,*r,*q;
    head
    = new Node;
    head
    ->next = NULL;
    temp
    = new Node;
    temp
    ->next = NULL;
    p1
    = p1->next;
    p2
    = p2->next;
    for(s=p1;s;s=s->next)
    {
    for(r=p2;r;r=r->next)
    {
    q
    = new Node;
    temp
    ->next = q;
    q
    ->data = s->data * r->data;
    q
    ->index = s->index + r->index;
    q
    ->next = NULL;
    head
    = addList(temp,head);
    }
    }
    return head;
    }

    //打印多项式
    void printList(Node *head)
    {
    Node
    *p = NULL;
    p
    = head->next;
    if(p==NULL)
    {
    cout
    <<"文件为空";
    }
    else
    {
    do
    {
    if(p->data>=0)
    cout
    <<p->data<<"x^"<<p->index;
    else
    cout
    <<p->data<<"x^"<<p->index;
    if(p->next!=NULL)
    cout
    <<"+";
    p
    =p->next;
    }
    while(p != NULL);
    cout
    <<endl;
    }
    }

    //主函数
    int main()
    {
    int i;
    Node
    *p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL;
    cout
    <<"创建第一个多项式的链表:"<<"\n";
    p1
    = createList();
    cout
    <<"\n";
    cout
    <<"创建第二个多项式的链表:"<<"\n";
    p2
    = createList();
    cout
    <<"第一个多项式为:";
    printList(p1);
    cout
    <<"\n"<<"第二个多项式为:";
    printList(p2);
    p3
    = addList(p1,p2); //实现多项式相加
    cout<<"\n"<<"多项式相加后为:";
    printList(p3);
    cout
    <<endl;
    p4
    = mulList(p1,p2); //实现多项式相乘
    cout<<"多项式相乘后为:";
    printList(p4);
    cin
    >>i;
    return 0;
    }

     



沪ICP备19023445号-2号
友情链接