实验一 线性表操作(一元多项式的运算)
实验目的
- 定义线性表的链式存储
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);
void 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);
}
//补齐代码
完整代码:
#include<iostream>
using namespace std;
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;
printf("请输入一元多项式1:\n");
poly_create(La);
printf("一元多项式1:\n");
poly_display(La);
printf("请输入一元多项式2:\n");
poly_create(Lb);
printf("一元多项式2:\n");
poly_display(Lb);
poly_add(La, Lb, Lc);
printf("加的结果:\n");
poly_display(Lc);
poly_subtract(La, Lb, Ld);
printf("减的结果:\n");
poly_display(Ld);
return 0;
}
//补齐代码
void poly_create(polylist &L){
int n,e;
float c;
L = new struct polynode;
polylist p = L;
scanf("%d",&n);
while (n--){
scanf("%f%d",&c,&e);
polylist tmp = new struct polynode;
tmp->coef = c;
tmp->expn = e;
p->next = tmp;
p=tmp;
}
p->next = NULL;
}
void poly_display(polylist L){
if (!L->next){
printf("0 0\n");
return ;
}
polylist p = L->next;
while (p){
printf("%.0f %d\n",p->coef,p->expn);
p = p->next;
}
}
void poly_add(polylist La, polylist Lb, polylist &Lc){
Lc = new struct polynode;
polylist p = Lc;
polylist p1 = La->next;
polylist p2 = Lb->next;
while (p1 && p2){
if (p1->expn > p2->expn){
polylist tmp = new struct polynode;
tmp->coef = p2->coef;
tmp->expn = p2->expn;
p->next = tmp;
p = p->next;
p2 = p2->next;
}
else if (p1->expn < p2->expn){
polylist tmp = new struct polynode;
tmp->coef = p1->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
p1 = p1->next;
}
else {
if (p1->coef + p2->coef != 0){
polylist tmp = new struct polynode;
tmp->coef = p1->coef + p2->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1){
polylist tmp = new struct polynode;
tmp->coef = p1->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
p1 = p1->next;
}
while (p2){
polylist tmp = new struct polynode;
tmp->coef = p2->coef;
tmp->expn = p2->expn;
p->next = tmp;
p = p->next;
p2 = p2->next;
}
p->next = NULL;
}
void poly_subtract(polylist La, polylist Lb, polylist &Lc){
Lc = new struct polynode;
polylist p = Lc;
polylist p1 = La->next;
polylist p2 = Lb->next;
while (p1 && p2){
if (p1->expn > p2->expn){
//polylist p = Lc;
polylist tmp = new struct polynode;
tmp->coef = -p2->coef;
tmp->expn = p2->expn;
p->next = tmp;
p = p->next;
p2 = p2->next;
}
else if (p1->expn < p2->expn){
//polylist p = Lc;
polylist tmp = new struct polynode;
tmp->coef = p1->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
p1 = p1->next;
}
else {
if (p1->coef - p2->coef != 0){
//polylist p = Lc;
polylist tmp = new struct polynode;
tmp->coef = p1->coef - p2->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1){
polylist tmp = new struct polynode;
tmp->coef = p1->coef;
tmp->expn = p1->expn;
p->next = tmp;
p = p->next;
p1 = p1->next;
}
while (p2){
polylist tmp = new struct polynode;
tmp->coef = -p2->coef;
tmp->expn = p2->expn;
p->next = tmp;
p = p->next;
p2 = p2->next;
}
p->next = NULL;
}