一个一元稀疏多项式求和问题?

slimjim 2006-03-21 07:40:29
刚学数据结构,老师就布置一个作业,一元稀疏多项式求和,要求,建立多项式,顺序输入,降幂输出,虽然有点认识,但是还是一知半解,不知那位高手能够赐教?
...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhu_doc 2006-04-18
  • 打赏
  • 举报
回复
除了: 包含some #include "^^^^"s
和输入 输出函数printf->cout
scanf ->cin
我想就没有什么区别了哦
slimjim 2006-04-18
  • 打赏
  • 举报
回复
chenhu_doc((在代码中找到了我(小虎哥))) ( 你用的是C语言,
slimjim 2006-04-18
  • 打赏
  • 举报
回复
上楼的代码是有点繁杂,如果只用一个输出,大家调用那会好一点。这样会简单点。
chenhu_doc 2006-04-15
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"

typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}Link,*LinkList;

LinkList InitList()
{
Link * head = (LinkList)malloc(sizeof(Link));
head->coef = 0.0;
head->expn = 0;
head->next = NULL;
return head;
}

Link * MakeNode()
{
float inCoef;
int inExpn;
Link * node = (LinkList)malloc(sizeof(Link));
printf("coef : ");
scanf("%f",&inCoef);
printf("expn : ");
scanf("%d",&inExpn);
node->coef = inCoef;
node->expn = inExpn;
return node;
}


LinkList CreatePolyn()
{
int i;
int a;

Link * node = NULL;
Link * p = NULL;
Link * q = NULL;
Link * head = InitList();


printf("input the number of La's items: ");
scanf("%d",&a);

for( i=0; i < a; i++)
{
node = MakeNode();
q = head->next;
p = head;
while( q && node->expn > q->expn )
{
p = q;
q = q->next;
}
if( node->expn == 0)
{
head->coef += node->coef;
}
else if( q == NULL || node->expn < q->expn )
{
p->next = node;
node->next = q;
}
else
{
q->coef += node->coef;
}
}
return head;
}

int Compare( int aExpn, int bExpn)
{
return ( (aExpn > bExpn) ? 1 : ((aExpn == bExpn) ? 0 : -1) );
}

void DelFirst( Link * head, Link * q)
{
q = head->next;
head->next = head->next->next;
}


int ListEmpty( LinkList L)
{
if(L->next==NULL)
return 1;
else
return 0;
}

void Append(LinkList L, Link * q)
{
Link * p = L;
while( p->next )
p = p->next;
p->next = q;
}


void AddPolyn( LinkList La, LinkList Lb)
{
Link * ha = La;
Link * hb = Lb;

Link * qa = ha->next;
Link * qb = hb->next;
ha->coef += hb->coef;
while(qa && qb)
{
int aExpn, bExpn;
float aCoef,bCoef;
aExpn = qa->expn;
bExpn = qb->expn;
aCoef = qa->coef;
bCoef = qb->coef;
switch( Compare(aExpn, bExpn) )
{
case -1:
{
ha=qa;
qa=qa->next;
break;
}
case 0:
{
float sum = aCoef+bCoef;

if(sum != 0.0)
{
qa->coef = sum;
ha=qa;
}
else
{
DelFirst(ha,qa);
free(qa);
}

DelFirst(hb,qb);
free(qb);
qb = hb->next;
qa = ha->next;
break;
}
case 1:
{

DelFirst(hb,qb);
qb->next = ha->next;
ha->next = qb;
qb= hb->next;
ha= ha->next;
break;
}
}

}
if( !ListEmpty(Lb) )
Append(La,qb);
free(hb);

}

void PrintPolyn(LinkList L)
{
LinkList p= L;
while(p)
{
if(p->coef == 0.0 && p->expn == 0)
{
printf("");
p=p->next;
}
else
{
printf("%1.1f",p->coef);
if(p->expn )
printf("*x^%d",p->expn );
if(p->next && p->next->coef >0)
printf("+");
p=p->next;
}
}
printf("\n");
}


void main()
{

LinkList La = CreatePolyn();
LinkList Lb = CreatePolyn();

AddPolyn( La, Lb );
PrintPolyn( La );

}

// 也是今年开始学数据结构,花了一点时间把他做出来了。比较长,可能有冗余
stonepeter 2006-04-15
  • 打赏
  • 举报
回复
逻辑结构:线性表
物理结构:单链表
教材中应当有现成的程序可以用的
slimjim 2006-04-15
  • 打赏
  • 举报
回复
计算机,还好,经过了多天努力,终于弄出来了,。
谢谢你们的支持!!!!
sumnet 2006-03-31
  • 打赏
  • 举报
回复
不知道楼主学的什么专业啊
sumnet 2006-03-31
  • 打赏
  • 举报
回复
和楼主一样
我也是这学期刚开始学习的数据结构
你就建立一个稀疏矩阵
用三元组来进行存取
const int MaxTerm=100;
struct multinomial
{
element data[MaxTerm];
int mu,nu,tu;
}

然后对存储X的系数项的进行排序
输出
我能帮楼主的也就这么多了
slimjim 2006-03-30
  • 打赏
  • 举报
回复
怎么这个没有人光顾呀!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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