数据结构实验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);



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;
}

 

  • 9
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值