帮看一个数据结构的问题

vitamines 2004-06-26 11:08:38
将一个循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项和偶次项,要求利用原来的循环链表的结点空间构成着两个链表

希望能给出代码
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingdaolitao 2004-06-27
  • 打赏
  • 举报
回复
建议你将属性link换成next,first换成head舒服点。
另外,用不着用循环链表,单链表就可以把。
qingdaolitao 2004-06-27
  • 打赏
  • 举报
回复
重写了Classify(),其他的用你的function,对否?
void CircList::Classify( )
{
CircList oddlist,evenlist; //构造奇偶项的头结点。
CircListNode * p=first->link; //指向原多项式第一项。
CircListNode * q=p; //指向p
for(;p!=first;p=q->link) {
q=p;
if(p->exp%2==1){
//oddlist.Insert(p->coef,p->exp); 调用insert会重新new出一个结点,没利用原结点。
p->link=oddlist.getfirst()->link ;
oddlist.getfirst()->link =p;
}
else{
//evenlist.Insert(p->coef,p->exp); 同上。
p->link=evenlist.getfirst()->link ;
evenlist.getfirst()->link=p;
}
}
oddlist.last =oddlist.getlast ();
evenlist.last =evenlist.getlast ();
display( );
}
qingdaolitao 2004-06-27
  • 打赏
  • 举报
回复
收藏,修改中。。。
vitamines 2004-06-27
  • 打赏
  • 举报
回复
有没有行啊?
qingyuan18 2004-06-26
  • 打赏
  • 举报
回复
“一个循环链表表示的稀疏多项式”,
怎么表示的?
vitamines 2004-06-26
  • 打赏
  • 举报
回复
#include <iostream.h>
class CircList;
class CircListNode {
friend class CircList;
public:
CircListNode ( int xcoef = 0,int xexp=0,CircListNode *next = NULL )
: coef (xcoef),exp(xcoef),link (next){ } //构造函数private:
private:
int coef;
int exp; //结点数据
CircListNode *link; //链接指针
};

class CircList {
private:
CircListNode *first, *last;
//链表的表头指针、当前指针和表尾指针
public:
CircList( );
void Classify( );
void Insert(int xcoef,int xexp);
CircListNode * geteven( );
void display( );
CircListNode * getfirst( );
void link(CircList & list1);
CircListNode * getlast( );

};

void CircList::Insert(int xcoef,int xexp)
{

CircListNode *p=new CircListNode(xcoef,xexp,first);
last->link=p;
last=p;
}

CircList::CircList( )
{
first=last=new CircListNode(0,0,NULL);
first->link=last;
last->link=first;
}


CircListNode * CircList::geteven( )
{
Classify( );
CircListNode *p=first->link;
while(p!=first&&((p->exp)%2==1))
{
p=p->link;
}
if((last->exp%2)==1) p=NULL;
return p;
}

void CircList::display( )
{
CircListNode * p=first->link;
for(;p!=first;p=p->link)
cout<<"("<<p->coef<<","<<p->exp<<") ";
}

CircListNode * CircList::getfirst( )
{
return first;
}

void CircList::Classify( )
{
CircList oddlist,evenlist;
CircListNode * p=first->link;
for(;p!=first;p=p->link)
{
if(p->exp%2==1) oddlist.Insert(p->coef,p->exp);
else evenlist.Insert(p->coef,p->exp);
}
oddlist.link(evenlist);
CircListNode * q=oddlist.getfirst( );
p=first->link;
q=q->link;
for(;p!=first;p=p->link)
{
p->coef=q->coef;
p->exp=q->exp;
q=q->link;
}
display( );
}

void CircList::link(CircList & list1)
{
last->link=list1.getfirst( )->link;
list1.getlast( )->link=first;
}

CircListNode * CircList::getlast( )
{
CircListNode *p=first->link;
for(;p!=first;p=p->link)
;
return p;
}
















vitamines 2004-06-26
  • 打赏
  • 举报
回复
2x43+3x30+6x29+8x18+...+...

69,336

社区成员

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

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