作业帮 > 数学 > 作业

数据结构一元多项式的代数运算

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:数学作业 时间:2024/06/10 15:09:18
数据结构一元多项式的代数运算
1.课程设计目的:
本设计的主要目的是设计一个一元多项式简单计算器.熟悉掌握一元多项式在链式存储结构上的实现,能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出.体会链式存储结构的优缺点和适用性.
2.实验内容:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:n,a,e1,c2,e2…,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排列;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b.
数据结构一元多项式的代数运算
//多项式相加(用单链表实现,用尾插法建表,用墨守成连线法求新的多项式)
#include
#include
typedef struct LNode //单链表的结构
{
int coef,exp;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList &L) //单链表的初始化,数据输入
{
LinkList p,s;
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(0);
L->next=NULL;
p=L;
do //用尾插法进行输入
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d%d",&s->coef,&s->exp);
p->next=s; //此处的连线有先后关系,因为如果先写第二个操作:L->next=s,
//则是先将第一个操作中的L->next变为了s,从而使赋值发生错误
if(s->next)
p=s;
}while(s->exp);
s->next=NULL;
}
int compare(int x,int y)
{
int flag;
if(x>y)
flag=1;
if(x==y)
flag=0;
if(xnext=NULL;
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
n=compare(pa->exp,pb->exp);
switch(n)
{
case 1:
pc->next=pa;
pc=pa;
pa=pa->next;
break;
case -1:
pc->next=pb;
pc=pb;
pb=pb->next;
break;
case 0:
pc->next=pa;
pc=pa;
pc->coef=pa->coef+pb->coef;
pa=pa->next;
pb=pb->next;
break;
}
}
pc->next=pa?pa:pb; //是其中一个线性表已结束的情况
free(Lb);
}
void print(LinkList &L)
{
LinkList p;
p=L->next;
while(p)
{
printf("+%d*x^%d",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
void main()
{
LinkList L1,L2,L3;
printf("Please input L1(coef and exp):\n");
InitList(L1);
printf("L1=");
print(L1);
printf("Please input L2(coef and exp):\n");
InitList(L2);
printf("L2=");
print(L2);
Add(L1,L2,L3);
printf("The new list is:\n");
print(L3);
printf("\n");
}