实验1 线性表操作(一元多项式运算)
一、实验目的
1. 定义线性表的链式存储
2. 实现对线性表的基本操作和具体函数定义
二、实验内容
1. 定义线性表的链式存储
2. 实现对线性表的基本操作和具体函数定义
3. 定义输出一元多项式的函数
4. 编写主程序调用上面的函数实现一元多项式的加减运算
三、实验数据输入输出要求
输入示例:
3
2 3
3 4
5 7
5
2 1
3 3
-3 4
4 6
5 7
(说明:第一个数据3表示该第一个一元多项式的项数为3,后面的2 3 表示第一项的系数为2 指数为3;按指数递增的次序输入)
输出示例:
一元多项式1: 2x(3)+3x(4)+5x(7)
一元多项式2: 2x(1)+3x(3)-3x(4)+4x(6)+5x(7)
加的结果:2x(1)+5x(3) +4x(6)+10x(7)
减的结果:-2x(1)-1x(3)+6x(4)-4x(6)
四、程序代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct polynode
{ float coef; //系数
int expn; //指数
struct polynode *next;
} polynode,*polylist;
void poly_create(polylist &L); //创建链表
void poly_display(polylist L); //显示链表内容
void poly_add(polylist La, polylist Lb, polylist &Lc); //多项式相加
void poly_subtract(polylist La, polylist Lb, polylist &Lc); //多项式相减
int main()
{
polylist La,Lb,Lc,Ld;
poly_create(La);
poly_display(La)
poly_create(Lb);
poly_display(Lb);
poly_add(La, Lb, Lc);
poly_ display(Lc);
poly_subtract(La, Lb, Ld);
poly_display(Ld);
}
//补齐下面代码
void poly_create(polylist& L)
{
int i;
scanf_s("%d", &i);
L = (polylist)malloc(sizeof(polynode));
polylist p;
p = L;
for (int j = 1; j <= i; j++)
{
p->next = (polylist)malloc(sizeof(polynode));
p = p->next;
scanf_s("%f", &p->coef);
scanf_s("%d", &p->expn);
}
p->next = NULL;
}
void poly_display(polylist L)
{
polylist p;
p = L->next;
printf("%.0fx(%d)", p->coef, p->expn);
p = p->next;
while (p != NULL)
{
if (p->coef > 0)
{
printf("+%.0fx(%d)", p->coef, p->expn);
}
else
{
printf("%.0fx(%d)", p->coef, p->expn);
}
p = p->next;
}
printf("\n");
}
void poly_add(polylist La, polylist Lb, polylist& Lc)
{
polylist pa, pb, pc;
pc = (polylist)malloc(sizeof(polynode));
Lc = pc;
pa = La->next;
pb = Lb->next;
float x;
while (pa && pb)
{
if (pa->expn == pb->expn)
{
x = pa->coef + pb->coef;
if (x!=0)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = x;
pc->expn = pa->expn;
}
pa = pa->next;
pb = pb->next;
}
else
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
if (pa->expn< pb->expn)
{
pc->coef = pa->coef;
pc->expn = pa->expn;
pa = pa->next;
}
else
{
pc->coef = pb->coef;
pc->expn = pb->expn;
pb = pb->next;
}
}
}
while (pa)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = pa->coef;
pc->expn = pa->expn;
pa = pa->next;
}
while (pb)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = pb->coef;
pc->expn = pb->expn;
pb = pb->next;
}
pc->next = NULL;
}
void poly_subtract(polylist La, polylist Lb, polylist& Lc)
{
polylist pa, pb, pc;
pc = (polylist)malloc(sizeof(polynode));
Lc = pc;
pa = La->next;
pb = Lb->next;
float x;
while (pa && pb)
{
if (pa->expn == pb->expn)
{
x = pa->coef - pb->coef;
if (x!=0)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = x;
pc->expn = pa->expn;
}
pa = pa->next;
pb = pb->next;
}
else
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
if (pa->expn< pb->expn)
{
pc->coef = pa->coef;
pc->expn = pa->expn;
pa = pa->next;
}
else
{
pc->coef = -pb->coef;
pc->expn = pb->expn;
pb = pb->next;
}
}
}
while (pa)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = pa->coef;
pc->expn = pa->expn;
pa = pa->next;
}
while (pb)
{
pc->next = (polylist)malloc(sizeof(polynode));
pc = pc->next;
pc->coef = -pb->coef;
pc->expn = pb->expn;
pb = pb->next;
}
pc->next = NULL;
}