案例2.1-一元多项式的运算(顺序表实现)

案例2.1-一元多项式的运算(顺序表实现)

#include<iostream>
#include<string>
using namespace std;
#define MAX 20


typedef struct//定义存放多项式的数组类型
{
	double coef;//系数
	int exp;//指数
}polyarray[MAX];

typedef struct
{
	polyarray* data;
	int length;
}SqList;


//创建线性表
void create(SqList& L, polyarray a, int n)
{
	//初始化
	L.data = new polyarray[20];
	L.length = 0;
	//分别等于结构体数组中的系数和指数
	for (int i = 0; i < n; i++)
	{
		L.data[i]->coef = a[i].coef;
		L.data[i]->exp = a[i].exp;
		L.length++;
	}

}

//显示创建的线性表
void show(SqList& L)
{
	//打印系数
	cout << "系数:";
	for (int i = 0; i < L.length; i++)
	{
		cout << L.data[i]->coef << " ";
		
	}
	cout << endl;
	//打印指数
	cout << "指数:";
	for (int i = 0; i < L.length; i++)
	{
		cout<< L.data[i]->exp << " ";

	}
	cout << endl;
	//打印元素个数
	cout <<"元素个数为:"<< L.length << endl;
}

//两个多项式相加
void add(SqList& result_L, SqList& L1, SqList& L2)
{
	//初始化结果线性表
	result_L.data = new polyarray[20];
	result_L.length = 0;

	int num1 = L1.length;
	int num2 = L2.length;
	/*
	1.比较两个线性表的长度(元素个数)
	2.下标先以长度小的开始遍历 对应的指数相加
	3.然后以长度小的长度值作为下标起点,将长度大的后面的元素赋给新的线性表
	4.新的线性表的长度等于长度大的线性表的长度
	*/

	if (num1 > num2)
	{
		result_L.length = num1;
		for (int i = 0; i < num2; i++)
		{
			result_L.data[i]->coef = L1.data[i]->coef + L2.data[i]->coef;
			result_L.data[i]->exp = L1.data[i]->exp;
		}
		for (int j = num2; j < num1; j++)
		{
			result_L.data[j]->coef = L1.data[j]->coef;
			result_L.data[j]->exp = L1.data[j]->exp;
		}

	}
	else if (num1 < num2)
	{
		result_L.length = num2;
		for (int i = 0; i < num1; i++)
		{
			result_L.data[i]->coef = L1.data[i]->coef + L2.data[i]->coef;
			result_L.data[i]->exp = L1.data[i]->exp;
		}

		for (int j = num1; j < num2; j++)
		{
			result_L.data[j]->coef = L2.data[j]->coef;
			result_L.data[j]->exp = L2.data[j]->exp;
		}

	}
	else
	{
		result_L.length = num1;
		for (int i = 0; i < num1; i++)
		{
			result_L.data[i]->coef = L1.data[i]->coef + L2.data[i]->coef;
			result_L.data[i]->exp = L1.data[i]->exp;
		}

	}

	cout << "结果线性表的元素个数:" << result_L.length << endl;

}



int main()
{
	//创建结构体数组
	polyarray a = { {10,0},{5,1},{-4,2},{3,3},{2,4}};
	//创建线性表
	SqList L1;
	create(L1, a, 5);
	//打印结果
	show(L1);


	polyarray b = { {-3,0},{8,1},{4,2},{0,3}, {-5,4},{7,5},{-2,6}};
	SqList L2;
	create(L2, b, 7);
	show(L2);
	
	cout << string(50,'-') << endl;

	SqList result_L;
	add(result_L, L1, L2);
	show(result_L);

	//释放空间
	delete result_L.data;
	delete L1.data;
	delete L2.data;

	//按任意键继续
	system("pause");
	return 0;
}

运行结果

在这里插入图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式示为 a_n * x^n + a_(n-1) * x^(n-1) + ... + a_1 * x + a_0,其中 a_i 是系数,x 是变量,n 是指数。 要实现一元多项式的链示,我们可以定义一个结构体来多项式的每一项,包括系数和指数,并使用指针来连接每一项。示例代码如下: ``` #include <stdio.h> #include <stdlib.h> // 定义多项式项的结构体 typedef struct Node { int coefficient; // 系数 int exponent; // 指数 struct Node* next; // 下一项 } Node; // 创建多项式 Node* createPolynomial() { Node* head = (Node*)malloc(sizeof(Node)); // 创建头结点 head->next = NULL; Node* current = head; int coefficient, exponent; printf("请输入项数: "); int count; scanf("%d", &count); for (int i = 0; i < count; i++) { printf("请输入第%d项的系数和指数: ", i + 1); scanf("%d %d", &coefficient, &exponent); Node* newNode = (Node*)malloc(sizeof(Node)); newNode->coefficient = coefficient; newNode->exponent = exponent; newNode->next = NULL; current->next = newNode; current = newNode; } return head; } // 输出多项式 void printPolynomial(Node* polynomial) { Node* current = polynomial->next; while (current != NULL) { printf("%dx^%d", current->coefficient, current->exponent); if (current->next != NULL) { printf(" + "); } current = current->next; } printf("\n"); } int main() { Node* polynomial = createPolynomial(); printf("多项式为: "); printPolynomial(polynomial); return 0; } ``` 通过上述代码,我们可以创建一个包含多项式的链,并打印出其内容。你可以根据需要对多项式进行其他基本操作的实现,如插入、删除、合并等。 此外,你还可以在多项式的基础上实现一个简单的多项式计算器。你可以根据用户输入的操作,对多项式进行加法、减法、乘法等运算,最后输出结果。在计算过程中,你需要实现多项式转换为多项式数组的功能,并根据相应的运算规则进行计算。这样,你就可以通过简单的计算器来计算和操作一元多项式了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值