c++程序段错误 应该是分配内存出错了 谁能帮我调一下啊

fendou1314 2008-12-25 09:26:34
#include<iostream>
const int N =10;
using namespace std;
struct term {
int coef;
int exp;
};
struct LNode
{
int coef;
int exp;
struct LNode *next;
};
typedef LNode *LinkList;
//创建链表
void CreatPolyn(LinkList &L,term tt[N],int n)
{ LinkList s;
int i;
L=new LNode;
L->next=NULL;
cout<<"请输入多项式的项数n(n<N):"<<endl;
cin>>n;
cout<<"请输入多项式的每项的系数和指数:"<<endl;
for(i=0;i<n;i++)
{
cout<<"第"<< i <<"项"<<"coef,exp "<<endl;
cin>>tt[i].coef;
cin>>tt[i].exp;
s=new LNode;
s->coef=tt[i].coef;
s->exp=tt[i].exp;
s->next=L->next;
L->next=s;
}
}//多项式相加
void addpolyn(LinkList La,LinkList Lb)
{
LinkList pa,pb,q;
pa=La->next;
pb=Lb->next;
while(pa!=NULL&&pb!=NULL)
{
if(pa->exp>pb->exp)
{
q=pb;
La->next=q;
q->next=pa;
pb=pb->next;
}
else if(pa->exp<pb->exp)
{
pa=pa->next;
}
else
{
pa->coef+=pb->coef;
pa=pa->next;
pb=pb->next;
}
while(pa!=NULL)
{
pa=pa->next;
}
while(pb!=NULL)
{
pa->next=pb;
//pa=pb;
pa=pa->next;
}
}
}
//排序
void sort(LinkList &L)
{
LinkList p=L->next,q,r;
if(p!=NULL)
{
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=L;
while(q->next!=NULL&&q->next->exp<p->exp)
q=q->next;
p->next=q->next;
q->next=p;
p=r;
}
}
}
//输出
void Display(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL){
cout<<p->coef<<" "<<p->exp<<" ";
p=p->next;
}
}//主函数
int main()
{ LinkList La,Lb;
term *tt=new term[N];
term tt[N];
CreatPolyn(La,tt,N);
sort(La);
cout<<"多项式AX为:";
Display(La);
cout<<endl;
CreatPolyn(Lb,tt,N);
sort(Lb);
cout<<"多项式BX为:";
Display(Lb);
cout<<endl;
addpolyn(La,Lb);
sort(La);
Display(La);
delete []tt;
return 0;
}
这是个关于多项式相加的程序。哪位高手能帮我看看啊??
...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITLAYMAN 2009-01-05
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;
const int N =10;

struct term
{
int coef;
int exp;
};
struct LNode
{
int coef;
int exp;
struct LNode *next;
};
typedef LNode *LinkList;
//创建链表
void CreatPolyn(LinkList &L,term tt[N],int n)
{
LinkList s;
int i;
L=new LNode;
L->next=NULL;
cout <<"请输入多项式的项数n(n <N):" <<endl;
cin>>n;
cout <<"请输入多项式的每项的系数和指数:" <<endl;
for(i=0;i <n;i++)
{
cout <<"第" << i <<"项" <<"coef,exp " <<endl;
cin>>tt[i].coef;
cin>>tt[i].exp;
s=new LNode;
s->coef=tt[i].coef;
s->exp=tt[i].exp;
s->next=L->next;
L->next=s;
}
}
//多项式相加
void addpolyn(LinkList &La,LinkList &Lb)
{
LinkList pa,pb,q;

LinkList HeadLa = La;

pa=La->next;
pb=Lb->next;

while(pa!=NULL&&pb!=NULL)
{
if(pa->exp > pb->exp)
{
q=pb;
HeadLa->next=q;
pb=pb->next;
q->next=pa;

}
else if(pa->exp < pb->exp)
{
pa=pa->next;
}
else
{
pa->coef+=pb->coef;
pa=pa->next;
pb=pb->next;
}

HeadLa = HeadLa->next;
}

if(pa == NULL)
if(pb!=NULL)
HeadLa->next = pb;

}
//排序
void sort(LinkList &L)
{
LinkList p=L->next,q,r;
if(p!=NULL)
{
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=L;
while(q->next!=NULL&&q->next->exp <p->exp)
q=q->next;
p->next=q->next;
q->next=p;
p=r;
}
}
}
//输出
void Display(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL)
{
cout <<p->coef <<" " <<p->exp <<" ";
p=p->next;
}
}//主函数
int main()
{
LinkList La,Lb;
term *tt=new term[N];

CreatPolyn(La,tt,N);

sort(La);

cout <<"多项式AX为:";

Display(La);
cout <<endl;

CreatPolyn(Lb,tt,N);

sort(Lb);

cout <<"多项式BX为:";

Display(Lb);
cout <<endl;

addpolyn(La,Lb);

sort(La);

Display(La);

delete []tt;

return 0;
}

可以得到预期的结果了,不过有一点,程序有内存泄漏。。。自己改改吧。。。
wangkeyunanjing 2009-01-03
  • 打赏
  • 举报
回复
帮顶
feng4206yu 2009-01-03
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

const int N =10;
struct term {
int coef;
int exp;
}; //可以不使用
struct LNode
{
int coef;
int exp;
struct LNode *next;
};
typedef LNode *LinkList;

//一个多项式长度
int Len(LinkList L)
{
LinkList p = L;
int i = 0;
while(p->next != NULL) {p=p->next;i++;}
return i;
}

//创建链表
void CreatePoly(LinkList &L)
{
LinkList s;
int i;
L=new LNode;
if(NULL == L) cout<<"Bad memory allocated!.."<<endl;//自己添加

L->next=NULL;
int n;
cout <<"请输入多项式的项数n(n <N):" <<endl;
cin>>n;
cout <<"请输入多项式的每项的系数和指数:" <<endl;
for(i=0;i <n;i++)
{
cout <<"第" << i <<"项" <<"coef,exp " <<endl;
s=new LNode;
cin>>s->coef>>s->exp;
s->next=L->next;
L->next=s;
}
}

//多项式相加
void addpolyn(LinkList La,LinkList Lb)
{
LinkList pa,pb,q;
pa=La->next;
pb=Lb->next;
while(pa!=NULL&&pb!=NULL)
{
if(pa->exp > pb->exp)
{
q=pb;
La->next=q;
q->next=pa;
pb=pb->next;
}
else if(pa->exp < pb->exp)
{
pa=pa->next;
}
else
{
pa->coef+=pb->coef;
pa=pa->next;
pb=pb->next;
}
while(pa!=NULL)
{
pa=pa->next;
}
while(pb!=NULL)
{
pa->next=pb;
//pa=pb;
pa=pa->next;
}
}
}

//排序
void sort(LinkList &L)
{
int n = Len(L);
if(n == 0 || n == 1) return;

LinkList p = L->next->next,q,r = L;
// r = p->next;
q = L->next;
for(int i = 1;i < n;i++)
{
for(int j = 1;j < n+1-i;j++)
{
if(q->exp > p->exp)
{
r->next = p;
q->next = p->next;
p->next = q;
}
else q = p,p = p->next;
}
r = L;
q = L->next;
p = q->next;
}

}

//输出
void Display(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL){
cout <<p->coef <<" " <<p->exp <<" ";
p=p->next;
}
}



//主函数
int main()
{
LNode* node01 = new LNode;
CreatePoly(node01);
cout<<Len(node01)<<endl;
Display(node01);
sort(node01);
Display(node01);
return 0;
}

我把你的代码改了一下,除了多项式相加,可以运行...自己再改改吧..
fendou1314 2008-12-26
  • 打赏
  • 举报
回复
哦,谢谢,又调试了一下,但是它只能输出La中的自身的内容,似乎哪个addpolyn函数没起到作用
wuqizhi 2008-12-26
  • 打赏
  • 举报
回复
对于两个排序好的多项式相加的算法最好用下栈,这样不容易出错。
lann64 2008-12-25
  • 打赏
  • 举报
回复
void addpolyn(LinkList &La,LinkList &Lb)
{
LinkList pa,pb,q;
pa=La->next;
pb=Lb->next;
while (pa!=NULL&&pb!=NULL)
{
if (pa->exp>pb->exp)
{
q=pb;
La->next=q;
q->next=pa;
pb=pb->next;
}
else if (pa->exp <pb->exp)
{
pa=pa->next;
}
else
{
pa->coef+=pb->coef;
pa=pa->next;
pb=pb->next;
}
while (pa!=NULL)
{
pa=pa->next;
}
while (pb!=NULL)
{
pa->next=pb; // pa是NULL,pa->next?不可访问。
//pa=pb;
pa=pa->next;
}
}
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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