0 0

链表问题···一元多项式乘法·····3

 

又是多链接多项式问题·············
还是那个乘法问题···········改了代码 就出问题了········
求指导··········帮忙看下乘法那里哪 里出了问题·~~~~~~~~
再次估计是指针出错·,·但是就是找不出来····················
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct LNode{
    int coef;/*系数*/
    int expn;/*指数*/
    struct LNode *next;
}LNode,*LinkList;





void Insert_sort_list(LNode *head)
{
    LNode *p, *q, *t, *r;
    p = head->next;
    head->next = NULL;
    while(NULL != p)
    {
       t = head;
       q = t->next;
       while(NULL != q && q->expn <= p->expn)
       {
          t = q;
          q = q->next;
       }
       r = p ->next;
       t->next = p;
       p->next = q;
       p = r;
    }
}






void CreateList(LinkList L,int m)/*带头结点*/
{
    LinkList p,q;
    int i=0;
    p=q=L;
    L->next=NULL;
    printf("先输系数后输指数,中间空格\n");
    for(i=0;i<m;i++){
        p=(LNode *)malloc(sizeof(LNode));
        scanf("%d %d",&(p->coef),&(p->expn));
        L->next=p;
        L=p;

    }
    L->next=NULL;
    L=q;
    Insert_sort_list(L);
}/*test success*/


void print(LinkList L)
{
    LinkList p;
    p=L->next;
    printf("\n");
    while(p!=NULL){
        printf("\(%dX\^%d\)",p->coef,p->expn);
        if(p->next!=NULL)printf("\ \+\ ");
        p=p->next;
    }

}
void DeleteNode(LNode *p)
{
    LNode *q;
    q=p->next;
    p->next=q->next;
    free(q);
}/*删除节点*/

int LocateElem(LinkList L,int expn)/*查找是否有与该多项式的系数相同的项*/
{
    LNode *p;
    p=L;
    while(p->expn!=expn&&p->next!=NULL) {  p=p->next; }
    if (p->expn==expn){ return p->coef;} /*若找到则返回系数*/
    else return 0;

}

int Length(LinkList L)/*求多项式的项数*/
{
    LNode *p;
    int i=0;
    p=L->next;
    while(p!=NULL) {
    p=p->next;
    i++;
    }
    return i;
}
/*
void Delet(LinkList L)
{
    LNode *p,*q;
    p=L->next;
    while(p!=null)
    {
           q=p;
           p=p->next;
           free(q);
    }
}
*/

void Add(LinkList pa,LinkList pb,LinkList pc)/*多项式相加,pc=pa+pa,*/
{
     LNode *p, *q, *r, *t;
     p = pa->next;
     q = pb->next;
     r = pc;
     while(p!=NULL||q!=NULL)
     {
        if(p!=NULL&&q!=NULL)
        {
           if(p->expn<q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
           }
        else if(p->expn==q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef+q->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
              q=q->next;

           }
        else
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=q->coef;
              t->expn=q->expn;
              t->next=NULL;
              r->next=t;
              q=q->next;
           }
           r=r->next;

        }
        else if(p!=NULL&&q==NULL)
        {
             r->next=p;
             p=p->next;
             r=r->next;
        }
        else if(p==NULL&&q!=NULL)
        {
             r->next=q;
             q=q->next;
             r=r->next;
        }
     }
}

void Subtract(LinkList pa,LinkList pb,LinkList pc)/*多项式相减,pc=pa-pa*/
{
     LNode *p, *q, *r, *t;
     p = pa->next;
     q = pb->next;
     r = pc;
     while(p!=NULL||q!=NULL)
     {
        if(p!=NULL&&q!=NULL)
        {
           if(p->expn<q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
           }
        else if(p->expn==q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef-q->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
              q=q->next;

           }
        else
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=q->coef*(-1);
              t->expn=q->expn;
              t->next=NULL;
              r->next=t;
              q=q->next;
           }
           r=r->next;

        }
        else if(p!=NULL&&q==NULL)
        {
             r->next=p;
             p=p->next;
             r=r->next;
        }
        else if(p==NULL&&q!=NULL)
        {
             r->next=q;
             q=q->next;
             r=r->next;
        }
     }
}


void Multiply(LinkList pa,LinkList pb,LinkList pc)/*多项式相乘pc=pa*pb*/
{
    LNode *t, *c, *t1,*t2,*temp1,*temp2;/*temp1放第i个与pb相乘的开成的多项式 */
    temp1=(LinkList)malloc(sizeof(LNode));
    temp2=(LinkList)malloc(sizeof(LNode));
    temp1->next=NULL;
    temp2->next=NULL;
    t1=temp1;
    t2=temp2;
    for(pa=pa->next;pa!=NULL;pa=pa->next)
    {
        for(pb=pb->next;pb!=NULL;pb=pb->next)
        {
          t=(LNode *)malloc(sizeof(LNode));
          t->coef=(int)((pa->coef)*(pb->coef));
          t->expn=(int)((pa->expn)+(pb->expn));
          t->next=NULL;
          temp1->next=t;
          temp1=temp1->next;
        }
        pc->next=NULL;
        c=pc;
        Add(t1,t2,c);
        t2=c;
        temp1->next=NULL;


    }
    pc=t2;

   
}

int main()
{
    LinkList L,M,N;
    int m,n;
    L=(LinkList)malloc(sizeof(LNode));
    M=(LinkList)malloc(sizeof(LNode));
    N=(LinkList)malloc(sizeof(LNode));
    N->next=NULL;
    printf("请输入您要构造的多项式的项数\n");
    scanf("%d",&m);
    CreateList(L,m);
    print(L);
    printf("\n长度为:%d",Length(L));
    printf("\n\n输入您要查找该多项式的系数相同的项的指数值:\n");
    scanf("%d",&n);
    if(n=LocateElem(L,n)) printf("存在指数与此相同的项,系数为:%d\n",n);
    else printf("未找到!");
    printf("\n以下构造多一个多项式与原多项式进行运算\n");
    printf("\n请输入您要构造的多项式的项数\n");
    scanf("%d",&m);
    CreateList(M,m);
    printf("\n两个多项式相加的结果:\n");
    Add(L,M,N);
    print(N);
    printf("\n两个多项式相减的结果:\n");
    Subtract(L,M,N);
    print(N);
    printf("\n两个多项式相乘的结果:\n");
    Multiply(L,M,N);
    print(N);

    getch();
    return 0;

}

 

    

C 
2011年7月03日 00:10
目前还没有答案

相关推荐

    数据结构课设(一元多项式乘法)

    (2)设计算法实现一元多项式乘法; (3)分析算法的时间复杂度和空间复杂度 一、总体设计 1 二、详细设计 1 2.1存储结构 1 2.2建立链表 1 2.3遍历操作 1 2.4多项式相乘算法 2 三、调试与测试 2 3.1方案一 2 3.2...

    用单链表实现一元多项式的乘法(c++).

    总之,用单链表实现一元多项式的乘法是一种有效的数据结构和算法的结合,它展示了如何利用链表的动态性来处理复杂的数学运算。在C++中实现这一操作需要对链表操作有深入的理解,并能熟练运用数据结构和算法设计思想...

    一元多项式的乘法

    数据结构中,用单向链表实现一元多项式的乘法

    C++ 链表实现两个一元多项式相加

    本文将深入探讨如何使用C++通过链表数据结构来实现一元多项式的加法操作。一元多项式通常由一系列的系数和指数对组成,例如2x^3 + 5x^2 - 3x + 1。这种表达式可以通过链表的节点来表示,每个节点存储一个系数和对应...

    链表实现一元多项式

    在ubuntu的gcc下运行正常,适合数据结构实验的参考,代码写的比较规范,初学者很容易看懂

    一元多项式的计算C++链表

    在C++编程中,我们可以使用链表数据结构来有效地实现一元多项式的操作,这是因为链表允许动态地存储和管理元素,非常适合处理具有未知长度的多项式序列。 首先,我们需要创建一个节点结构来表示多项式的每个项。这...

    一元多项式相加 java实现

    在Java编程语言中,"一元多项式相加"是一个典型的算法问题,它涉及到数据结构的设计和基础数学概念的应用。在此课程设计题中,我们主要关注如何使用链表来存储和操作一元多项式,然后实现它们的相加功能。 一元...

    一元多项式乘法课设

    在本次的“一元多项式乘法课设”中,我们关注的核心是计算机科学中的算法设计,特别是如何处理数学上的一元多项式乘法问题。这个课程设计涵盖了多个关键的知识点,包括数据结构的选择、算法设计与实现、需求分析、...

    顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。.docx

    本文档是关于一元多项式加法、减法和乘法实现的课程设计报告,主要关注在顺序结构和动态链表结构下的实现方法。设计目标是加深对数据结构的理解,尤其是如何选择合适的数据结构来解决问题,并能编写相关算法。设计...

    一元多项式乘法,功能: 完成两个n元多项式作乘法,给出明确的等式形式。

    标题中的“一元多项式乘法”是指在数学中,两个一元多项式相乘得到新的多项式的过程。这个过程通常涉及到将一个多项式的每个项与另一个多项式的每个项相乘,然后将结果合并,去除相同的项并进行加法运算。在计算机...

    一元多项式算法c语言的实现

    在计算机科学中,一元多项式算法是一种处理数学上的一元多项式问题的算法,它通常涉及加法、减法、乘法以及求幂等运算。C语言是一种强大的编程语言,特别适合用来实现这种底层的算法,因为它允许直接操作内存和数据...

    基于C++与链表的两个一元多项式的基本运算(加法、减法、 乘法和求导运算)

    在计算机科学中,一元多项式的基本运算,如加法、减法、乘法和求导,是数学问题在编程中的典型应用。本项目聚焦于使用C++编程语言和链表数据结构实现这些运算,这对于理解和掌握数据结构、算法以及C++编程技巧具有...

    顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

    根据给定文件的信息,我们可以总结出以下关于一元多项式在顺序结构与动态链表结构下的加法、减法及乘法实现的关键知识点。 ### 一、基础概念 #### 1.1 一元多项式定义 一元多项式是由一系列项组成的数学表达式,...

    一元多项式加法乘法运算C+链表

    在本项目中,我们主要探讨的是使用C语言和链表数据结构实现一元多项式的加法和乘法运算。这是一份典型的数据结构与算法作业,适用于计算机科学的学习者,尤其是那些正在学习C语言和链表操作的学生。下面将详细阐述...

    数据结构之链表--一元多项式的计算

    本话题聚焦于链表的应用,具体来说,是利用链表实现一元多项式的计算。下面将详细介绍链表及其在一元多项式计算中的应用。 链表不同于数组,它不连续存储数据,而是通过节点间的指针链接。每个节点包含两个部分:...

    数据结构一元多项式实现

    一元多项式是由常数、变量以及它们的系数组成的数学表达式,如 \( ax^n + bx^{n-1} + ... + cz^0 \),其中 \( a, b, c, ..., n \) 是系数,\( x \) 是变量。 一元多项式的抽象数据结构(ADT)设计通常包括以下关键...

    单链表实现一元多项式相乘.rar

    通过阅读和理解这些代码,你可以更深入地了解如何利用链表数据结构来实现一元多项式的乘法算法。 总结来说,单链表提供了一种灵活且内存效率高的方式来表示和操作一元多项式。在实现乘法算法时,关键在于遍历、合并...

Global site tag (gtag.js) - Google Analytics