【数据结构新手】一元多项式相加问题

ihewro 2016-04-16 03:02:08
#include <stdio.h>
#include <malloc.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int ElemType;
typedef int Status;

typedef struct
{
int coef;//系数
int index;//指数
}term;

typedef struct Node
{
term data;
Node *next;

}*LinkList;

Status InitPoyln(LinkList *l)
{
//【1】构建一个空链表
*l = (LinkList)malloc (sizeof(Node));
(*l)->next = NULL;
return OK;

}

Status CreatPoyln(LinkList *l)
{
//【2】尾插法建立链表
LinkList p,r;
r = (*l);
while (1)
{
p = (LinkList)malloc(sizeof(Node));
// printf("请输入多项式的系数和指数:");
scanf("%d %d",&p->data.coef,&p->data.index);
if(p->data.coef == -1&&p->data.index == -1)
break;
r->next = p;
r = p;
}
return OK;
}

Status DestroyPoyln(LinkList *l)
{
//【3】销毁链表
LinkList p,q;
p = (*l)->next;
while (p)
{
q= p->next;
free(p);
p = q;
}
return OK;
}

void PrintfPoyln(LinkList l)
{
//【4】打印链表
LinkList p;
p = l->next;
while (p!=NULL)
{

printf("%d %d \n",p->data.coef,p->data.index);
p = p->next;
}
// if(!p)
// return ERROR;
// return OK;
}

Status LengthPoyln(LinkList l)
{
//【5】链表的长度
int i = 0;
LinkList p;
p = l->next;
while (p)
{
i = i+1;
p = p->next;
}
return i;
}

Status AddPoyln (LinkList *la,LinkList *lb)
{
//【6】多项式相加
printf("到这里了");
LinkList p1,p2,pb1,pc2;
p1 = (*la)->next;
p2 = (*lb)->next;
pb1 = (*la);
pc2 = (*lb)->next;

while(p2)
{
if(p1)
{
p1 = pb1;
}
if(p1->data.index > p2->data.index)
{
pb1 = p1;
p1 = p1->next;
if(p1)
{
pb1->next = p2;
}

}
if(p1->data.index = p2->data.index)
{
p1->data.coef = p1->data.coef + p2->data.coef;
pb1 = p1;
p1 = p1->next;
p2 = p2->next;
pc2 = pc2->next;
}
if(p1->data.index < p2->data.index)
{
p2->next = p1;
pb1->next = p2;
pb1 = p1;
p1 = p1->next;
p2 = pc2->next;
}
}
return OK;
}

void main ()
{
LinkList la,lb;
InitPoyln(&la);
// InitPoyln(&lb);
CreatPoyln(&la);
// CreatPoyln(&lb);
// AddPoyln(&la,&lb);
// DestroyPoyln(&lb);
PrintfPoyln(la);
}

这是我写的,相加的部分,各位可以不用看,为什么打印多项式的时候,会提示:停止工作~!!
看了好几遍也没发现问题?
...全文
374 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihewro 2016-04-16
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:
楼主是不是又调试了别的函数? 就main函数里InitPoyln,CreatPoyln,PrintfPoyln函数应该是没问题的
恩恩,谢谢啦
小灸舞 版主 2016-04-16
  • 打赏
  • 举报
回复
楼主是不是又调试了别的函数?
就main函数里InitPoyln,CreatPoyln,PrintfPoyln函数应该是没问题的
ihewro 2016-04-16
  • 打赏
  • 举报
回复
加上去了,还是不行
ihewro 2016-04-16
  • 打赏
  • 举报
回复
引用 1 楼 qq423399099 的回复:
问题出在你没有将链表的最后一个节点的next指针置为NULL 这样就导致了调用PrintfPoyln打印节点的时候越界访问导致异常 PS:同时在CreatPoyln函数里还需要free(p),否则这个地方有内存泄露

Status CreatPoyln(LinkList *l)
{
    //【2】尾插法建立链表
    LinkList p,r;
    r = (*l);
    while (1)
    {
        p = (LinkList)malloc(sizeof(Node));
//        printf("请输入多项式的系数和指数:");
        scanf("%d %d",&p->data.coef,&p->data.index);
        if(p->data.coef == -1&&p->data.index == -1)
            break;
        r->next = p;
        r = p;
    }
	free(p); //需要释放掉p
	r->next = NULL; //最后一个节点的next要置为NULL
    return OK;
}
加上去了,还是不行
小灸舞 版主 2016-04-16
  • 打赏
  • 举报
回复
问题出在你没有将链表的最后一个节点的next指针置为NULL 这样就导致了调用PrintfPoyln打印节点的时候越界访问导致异常 PS:同时在CreatPoyln函数里还需要free(p),否则这个地方有内存泄露

Status CreatPoyln(LinkList *l)
{
    //【2】尾插法建立链表
    LinkList p,r;
    r = (*l);
    while (1)
    {
        p = (LinkList)malloc(sizeof(Node));
//        printf("请输入多项式的系数和指数:");
        scanf("%d %d",&p->data.coef,&p->data.index);
        if(p->data.coef == -1&&p->data.index == -1)
            break;
        r->next = p;
        r = p;
    }
	free(p); //需要释放掉p
	r->next = NULL; //最后一个节点的next要置为NULL
    return OK;
}

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧