单链表实现一元多项式相加的问题

通过编译但是输不出结果,不知道哪里出了问题,求救

 #include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int num;
    int expn;
    struct LNode *next;
}LNode,*LinkList;
//h,d是两个链表的头指针
void createlista(LinkList *h,int n)
{
    int i;
    *h=(LinkList)malloc(sizeof(LNode));
    LinkList p = *h;
    for(i=0;i<n+1;i++)
    {
        p->next=(LinkList)malloc(sizeof(LNode));
        p=p->next;
    }

}
void createlistb(LinkList *d,int t)
{
    int i;
    *d=(LinkList)malloc(sizeof(LNode));
    LinkList p = *d;
    for(i=0;i<t+1;i++)
    {
        p->next=(LinkList)malloc(sizeof(LNode));
        p=p->next;
    }

}
void inputa(LinkList h,int n)
{
    int i;
    LinkList p,q;
    p=h->next->next;
    q=h->next;
    printf("请输入a多项式的指数");
    for(i=0;i<n;i++)
    {
        scanf("%d",&p->expn);
        p=p->next;

    }
    printf("请输入a多项式的系数");
    for(i=0;i<n;i++)
    {
        scanf("%d",&q->num);
        q=q->next;
    }
}
void inputb(LinkList d,int t)
{
    int i;
    LinkList p,q;
    p=d->next->next;
    q=d->next;
    printf("请输入b多项式的指数");
    for(i=0;i<t;i++)
    {
        scanf("%d",&p->expn);
        p=p->next;
    }
    printf("请输入b多项式的系数");
    for(i=0;i<t;i++)
    {
        scanf("%d",&q->num);
        q=q->next;

    }
}
LinkList add(LinkList h,LinkList d)
{
    LinkList p,q,r,x,s;
    int sum;
    s=h;
    p=h->next->next;
    q=d->next->next;
    r=h->next;
    while(p!=NULL&&q!=NULL)
    {
        if(p->expn==q->expn)
        {
            sum=p->num+q->num;
            if(sum!=0)
            {
                p->num=sum;
                r->next=p;
                r=p;
                p=p->next;
                //r=p2;
                q=q->next;
                //free(r);
            }
            else
            {
                //r=p1;
                p=p->next;
                r->next=p;
                //free(r);
                //r=p2;
                q=q->next;
                //free(r);
            }
        }
        else if(p->expn<q->expn)
        {
            r->next=p;
            r=p;
            p=p->next;
        }
        else
        {
            x=(LinkList)malloc(sizeof(LNode));
            x->num=q->num;
            x->expn=q->expn;
            r->next=x;
            x->next=p;
            q=q->next;
            p=x->next;
        }
    }

    //r->next=p?p:q;
    while(p!=NULL)
    {
        p=p->next;
    }
    while(q!=NULL)
    {
        p->next=q;
        p=q;
        q=q->next;
    }
    return s;
    //free(p2);
}
void show(LinkList head)
{
    LinkList p;
    p=head->next->next;
    for(;p!=NULL;p=p->next)
    {
        printf("%dX^%d+",p->num,p->expn);
    }
}
int main()
{
    LinkList h,d,head;
    int n,t;
    printf("请输入第一个多项式的项数");
    scanf("%d",&n);
    printf("请输入第二个多项式的项数");
    scanf("%d",&t);
    createlista(&h,n);
    createlistb(&d,t);
    inputa(h,n);
    inputb(d,t);
    head=add(h,d);
    show(head);
    printf("Hello world!\n");
    return 0;
}

2个回答

add()函数中while循环p!=NULL以及q!=NULL出错,实际上p和q在取完链表输入的正确值后链表并没有指向NULL。
可选解决方案:在createlista()与createlistb()函数最后添加一行 p->next = NULL;

 inputa()与inputb()函数都需要改为二级指针传地址;如:
 void inputa(LinkList *d,int t);
 void inputb(LinkList *d,int t);
 然后函数内部指针修改下,便可。

若有帮助,还望采纳!!!谢谢。。。。

weixin_43191340
那边的薯片半价阿 谢谢您的回答,但是楼下的朋友的答案才是我需要的
10 个月之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 赞,建议采纳
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单链表实现一元多项式相加
# include # include # include typedef struct  LNode {   int  coef;   int  exp;   struct  LNode *next; }node; node *Createlist()//创建一元多项式链表 {   node *head,*middle,*s;//新定义三个链表head
一元多项式的相加(单链表的应用)
一元多项式的相加,基于单链表的结构上实现的。 单链表的结点结构定义为: typedef struct _NODE{ int coef; int exp; struct _NODE *next;}NODE; 第一个变量指的是系数,第二个变量指的是指数,x^7系数为1,指数为7 第三个变量next指针,将结点连接起来。 比如a1 = x^5+x^4+x^2+3 a2 = x^7+x^4...
c语言单链表实现一元多项式的相加
把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。     一元多项式可以用单链表表示,结点结构图示如下: coef  exp  next;伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一   2.1 如果p-&amp;gt;exp&amp;lt;q-&amp;gt;exp,则指针p后移;    2.2 如果p-&amp;gt;exp&amp;gt;q-...
线性表之单链表实现一元多项式相加 求值,求导
线性表之单链表实现一元多项式相加 求值,求导
单链表案例(二)一元多项式相加
数据结构是程序设计的必修知识,它是程序设计的基本功,并且在企业面试、日常工作、研究生入学考试中都占有重要的地位。不同于其他课程,本课程从单链表出发,手把手的全代码实现了栈与队列,树、图(包括数组和链表的两种形式),并对这些经典结构的应用也做了代码级的实现,覆盖了经典数据结构的全部内容. 西安电子科技大学周幸妮教授亲任本课程学术指导专家,本课程由丁宋涛教授和周幸妮教授共同设计,课程参考教材:周幸妮教授的《数据结构与算法分析新视角》
利用单链表实现一元多项式的表示及相加
第一个博客
java实现一元多项式相加
项的类   package demo; //一元多项式的项 public class term { //系数 int coef; //指数 int expn; public term() { } public term(int coef, int expn) { this.coef = coef; ...
一元多项式相加c实现
c语言实现一元多项式相加,用两种方法实现,数组和链表!
一元多项式相加 java实现
这是我们学校的一个课程设计题,我是用链表实现的,并且测试类也写得较简单。如果有什么不对的地方,请多指教。
一元多项式相加(链表实现)
用链表实现一元多项式的加法 进一步熟悉链表的相关操作
一元多项式相加的链式实现
#include"PLOY.h" #include #include #include //动态申请结点 NODE * alloc_node(int coef,int exp) { NODE * tmp = (NODE *)malloc(sizeof(NODE)); assert(tmp); tmp ->coef = coef; tmp ->exp =
一元多项式的相加链表实现
使用单链表实现一元多项式的相加,
一元多项式相加
编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能: 1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。 0. 退出 输入: 根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例): •1 多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数) 多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数) 多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数) •0 ---操作终止,退出。
一元多项式的相加
struct PolyNode { int coef; int expon; struct PolyNode* link; }; typedef struct PolyNode* Polynomial; Polynomial P1, P2,PS; int Compare(int e1, int e2) { if (e1 &amp;gt; e2) return 1; else if (...
一元多项式相加函数的问题
rnlinklist add(linklist H1,linklist H2)rn linklist H3=NULL;rn lnode *s1,*s2;rn lnode *pre=NULL;rn s1=H1;rn s2=H2;rn pre=H3;rn while(s1!=NULL&&s2!=NULL)rn if(s1->b==s2->b)rn pre=new lnode;rn pre->a=s1->a+s2->a;rn pre->b=s1->b;rn pre=pre->next;rn s1=s1->next;rn s2=s2->next;rn rn else if(s1->bb)rn pre=new lnode;rn pre->a=s1->a;rn pre->b=s1->b;rn s1=s1->next;rn pre=pre->next;rn rn elsern rn pre=new lnode;rn pre->a=s2->a;rn pre->b=s2->b;rn pre=pre->next;rn s2=s2->next;rnrn rn rn while(s1!=NULL||s2!=NULL)rn if(s1!=NULL)rn pre=new lnode;rn pre=s1;rn rn elsern pre=new lnode;rn pre=s2;rn rn rn rn rnrnrn return H3;rn
一元多项式相乘相加问题
代码 #include&amp;lt;stdio.h&amp;gt; int a[99][2]={0},b[99][2]={0}; int max1,max2,min1,min2; int p[99]={0},m[99]={0},tc[99]={0},tj[99]={0}; void cheng() { int i,j,max,min; max=max1+max2; min=min1+min2; for...
一元多项式相加用链表实现
题目说明: 编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能: 1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。 0. 退出 输入: 根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例): 1 多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数) 多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数) 多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数) 0 ---操作终止,退出。 输出: 对应一组输入,输出一次操作的结果(参见测试用例)。 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0> 0 无输出
一元多项式相加的算法和C++实现
利用顺序表的链式存储实现一元多项式的加法
用链表实现一元多项式的相加
用链表实现一元多项式的相加。 该算法借鉴了一下清华大学版的《数据结构》中的算法。 清华大学出的《数据结构》很值得看一看!
C链表实现一元多项式的相加
   设有两个一元多项式:       p(x)=p0+p1x+p2x2+···+pnxn       q(x)=q0+q1x+q2x2+···+qmxm 实现两个一元多项式的相加。
一元多项式相加(C语言实现)
poly.h#ifndef _POLY_H_ #define _POLY_H_#include<stdio.h> #include<stdlib.h> #include<malloc.h>//结点结构 typedef struct Polynode { int coef; int exp; struct Polynode * next; }Polynode,* Polylis
一元多项式相加相乘实现(数据结构)
用C++语言实现一元多项式的相加相乘,由于时间仓促不能完成的太好,以后我会继续努力实现更多的功能
一元多项式的相加 数据结构链表实现
#include #include typedef struct Node { float coe; //系数 int index; //指数 Node *next; }*polynomial; //操作名 void Initpolynomial(polynomial &L) //创建
数据结构—— 一元多项式的表示及相加(C语言单链表实现)
代码比较简单,没有完全按照严蔚敏版《数据结构(C语言版)》上39页到43页上的要求,只是实现了简单功能,且此代码输入多项式时只能按升幂的顺序输入(因为没有写多项式排序的函数) 个人感觉此代码短小精悍,且易理解,看懂了的话可以尝试完全按照书上的要求自己写代码。 直接上代码: #include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; #define LEN s...
单链表实现多项式相加
#include #include struct Node{ int coef;//系数 int expon;//指数 struct Node* next; }; void DestroyPoly(struct Node* Poly)//释放实现多项式申请的空间 { struct Node* Temp; while(Poly!=NULL){
多项式相加单链表实现
#include using namespace std; struct PolyNode{ double coef; int exp; PolyNode *next; }; class PolyClass { PolyNode *head;//单链表的头结点指针 public: PolyClass(); ~PolyClass(); void Disp(); void Creat
【数据结构新手】一元多项式相加问题
[code=c]#include rn#include rnrn#define TRUE 1rn#define FALSE 0rn#define OK 1rn#define ERROR 0rn#define INFEASIBLE -1rn#define OVERFLOW -2rnrntypedef int ElemType; rntypedef int Status;rnrntypedef struct rnrn int coef;//系数rn int index;//指数rnterm;rnrntypedef struct Node rnrn term data;rn Node *next;rn rn*LinkList;rnrnStatus InitPoyln(LinkList *l)rnrn //【1】构建一个空链表rn *l = (LinkList)malloc (sizeof(Node));rn (*l)->next = NULL;rn return OK;rnrnrnrnStatus CreatPoyln(LinkList *l)rnrn //【2】尾插法建立链表rn LinkList p,r;rn r = (*l);rn while (1)rn rn p = (LinkList)malloc(sizeof(Node));rn// printf("请输入多项式的系数和指数:");rn scanf("%d %d",&p->data.coef,&p->data.index);rn if(p->data.coef == -1&&p->data.index == -1)rn break;rn r->next = p;rn r = p;rn rn return OK;rnrnrnStatus DestroyPoyln(LinkList *l)rnrn //【3】销毁链表rn LinkList p,q;rn p = (*l)->next;rn while (p)rn rn q= p->next;rn free(p);rn p = q;rn rn return OK;rnrnrnvoid PrintfPoyln(LinkList l)rnrn //【4】打印链表rn LinkList p;rn p = l->next;rn while (p!=NULL)rn rnrn printf("%d %d \n",p->data.coef,p->data.index);rn p = p->next;rn rn// if(!p)rn// return ERROR;rn// return OK;rnrnrnStatus LengthPoyln(LinkList l)rnrn //【5】链表的长度rn int i = 0;rn LinkList p;rn p = l->next;rn while (p)rn rn i = i+1;rn p = p->next;rn rn return i;rnrnrnStatus AddPoyln (LinkList *la,LinkList *lb)rnrn //【6】多项式相加rn printf("到这里了");rn LinkList p1,p2,pb1,pc2;rn p1 = (*la)->next;rn p2 = (*lb)->next;rn pb1 = (*la);rn pc2 = (*lb)->next;rnrn while(p2)rn rn if(p1) rn rn p1 = pb1;rn rn if(p1->data.index > p2->data.index)rn rn pb1 = p1;rn p1 = p1->next;rn if(p1)rn rn pb1->next = p2;rn rnrn rn if(p1->data.index = p2->data.index)rn rn p1->data.coef = p1->data.coef + p2->data.coef;rn pb1 = p1;rn p1 = p1->next;rn p2 = p2->next;rn pc2 = pc2->next;rn rn if(p1->data.index < p2->data.index)rn rn p2->next = p1;rn pb1->next = p2;rn pb1 = p1;rn p1 = p1->next;rn p2 = pc2->next;rn rn rn return OK;rnrnrnvoid main ()rnrn LinkList la,lb;rn InitPoyln(&la);rn// InitPoyln(&lb);rn CreatPoyln(&la);rn// CreatPoyln(&lb);rn// AddPoyln(&la,&lb);rn// DestroyPoyln(&lb);rn PrintfPoyln(la);rnrn[/code]rn这是我写的,相加的部分,各位可以不用看,为什么打印多项式的时候,会提示:停止工作~!!rn看了好几遍也没发现问题?
一元多项式表示及相加
数据结构第二章实验一元多项式求和,c语言链式结构实现
一元多项式相加相减相乘
能进行一元多项式的相加、相减、相乘运算。要求采用菜单驱动方式进行执行,需构造数据结构(可参考教材),算法过程。要求,输入多项式,通过菜单选择操作,打印结果。
C++一元多项式相加
描述 用两个链表组织两个一元多项式,将相加的结果保存在前一个链表中。 输入 m(项数) c1(第一项系数) e1(第一项指数) c2 e2 ....... cm(第m项系数) em(第m项指数) n(项数) c1(第一项系数) e1(第一项指数) c2 e2 ....... cn(第n项系数) en(第n项指数) (不保证按指数降序输入) 输出 (保证按指数降序输出) c1(第一项系数) e1(第一项指数) c2 e2 ....... ck(第k项系数) ek(第k项指数) 示例输入 3 5 20 2 99 7 0 2 3 1998 -5 20 示例输出 3 1998 2 99 7 0
数据结构一元多项式相加.rar
数据结构一元多项式相加 用C语言实现的,功能强大好理解。
2.23一元多项式的相加
单链表的结点定义: typedef struct node{ int coef,exp; struct node *next; }Lnode,*LinkList; 相加函数的算法: void Addploy(LinkList &amp;la,LinkList &amp;lb) { LinkList pa,pb,re,u; int x; pa=la-&gt;next; pb=lb-&...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法