sinat_38006809 2017-03-22 16:24 采纳率: 0%
浏览 997

请问各位大神!!!关于链表问题一元多项式方程相加程序运行时输出heada时是垃圾值

#include
#include
#include

typedef struct polynode
{
float coef;
int exp;
struct polynode *next;
}polynode,*PLinklist;

PLinklist Create(int n)
{
PLinklist L,p;
int i;

L = (PLinklist)malloc(sizeof(polynode));
L->next = NULL;

for(i=n; i>0 ;--i)
{
p = (PLinklist)malloc(sizeof(polynode));
scanf("%f%d",&p->coef,&p->exp);
p->next = L->next;
L->next = p;
}

return(L);
}

PLinklist Attach(float co,int ex,PLinklist o)
{
PLinklist c;
c = (PLinklist)malloc(sizeof(polynode));
c->coef = co;
c->exp = ex;
o->next = c;
return c;
}

void Print(PLinklist L)
{
int i = 0;
PLinklist p = L;

while(p->next != NULL)
{
i++;
printf("%fx^%d ",p->coef,p->exp);
p=p->next;
}

printf("\n");
}

PLinklist Add(PLinklist A,PLinklist B)
{
PLinklist C;
PLinklist o;
PLinklist p = A;
PLinklist q = B;

float sum;

C = (PLinklist)malloc(sizeof(polynode));

o=C;

while((p != NULL) && (q != NULL))
{
if(p->exp == q->exp)
{
sum = p->coef+q->coef;
if(sum != 0)
o = Attach(sum,p->exp,o);
p = p->next;
q = q->next;
}

else if(p->exp < q->exp)
{
o = Attach(q->coef,q->exp,o);
q = q->next;
}
else{
o = Attach(p->coef,p->exp,o);
p = p->next;
}
}
while(p != NULL)
{
o = Attach(p->coef,p->exp,o);
p = p->next;
}
while(q != NULL)
{
o = Attach(q->coef,q->exp,o);
q = q->next;
}
o->next = NULL;
p = C;
C = C->next;
return C;
}

void main()
{
int n;
PLinklist A, B, C;
printf("Input the length of A :\n");
scanf("%d",&n);
A = Create(n);
Print(A);
printf("Input the length of B :\n");
scanf("%d",&n);
B = Create(n);
Print(B);
C = Add(A,B);
Print(C);
}

  • 写回答

1条回答 默认 最新

  • 小灸舞 2017-03-23 01:39
    关注

    因为你的Create函数创建的链表是带头结点的(头结点中的coef,exp存的是随机值)
    你Print函数应该从L->next开始进行循环,而且while判断的应该是p,而不是p->next
    改成下面这样:

     #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    typedef struct polynode
    {
        float coef;
        int exp;
        struct polynode *next;
    }polynode, *PLinklist;
    
    PLinklist Create(int n)
    {
        PLinklist L, p;
        int i;
    
        L = (PLinklist)malloc(sizeof(polynode));
        L->next = NULL;
    
        for (i = n; i>0; --i)
        {
            p = (PLinklist)malloc(sizeof(polynode));
            scanf("%f%d", &p->coef, &p->exp);
            p->next = L->next;
            L->next = p;
        }
    
        return(L);
    }
    
    PLinklist Attach(float co, int ex, PLinklist o)
    {
        PLinklist c;
        c = (PLinklist)malloc(sizeof(polynode));
        c->coef = co;
        c->exp = ex;
        o->next = c;
        return c;
    }
    
    void Print(PLinklist L)
    {
        int i = 0;
        PLinklist p = L->next;
    
        while (p != NULL)
        {
            i++;
            printf("%fx^%d ", p->coef, p->exp);
            p = p->next;
        }
    
        printf("\n");
    }
    
    PLinklist Add(PLinklist A, PLinklist B)
    {
        PLinklist C;
        PLinklist o;
        PLinklist p = A;
        PLinklist q = B;
    
        float sum;
    
        C = (PLinklist)malloc(sizeof(polynode));
    
        o = C;
    
        while ((p != NULL) && (q != NULL))
        {
            if (p->exp == q->exp)
            {
                sum = p->coef + q->coef;
                if (sum != 0)
                    o = Attach(sum, p->exp, o);
                p = p->next;
                q = q->next;
            }
    
            else if (p->exp < q->exp)
            {
                o = Attach(q->coef, q->exp, o);
                q = q->next;
            }
            else{
                o = Attach(p->coef, p->exp, o);
                p = p->next;
            }
        }
        while (p != NULL)
        {
            o = Attach(p->coef, p->exp, o);
            p = p->next;
        }
        while (q != NULL)
        {
            o = Attach(q->coef, q->exp, o);
            q = q->next;
        }
        o->next = NULL;
        p = C;
        C = C->next;
        return C;
    }
    
    void main()
    {
        int n;
        PLinklist A, B, C;
        printf("Input the length of A :\n");
        scanf("%d", &n);
        A = Create(n);
        Print(A);
        printf("Input the length of B :\n");
        scanf("%d", &n);
        B = Create(n);
        Print(B);
        C = Add(A, B);
        Print(C);
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 vscode的问题提问
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM