C语言 线性表实现一元多项式的表示及相加

解题思路
1.储存系数与项数在这里插入图片描述在这里插入图片描述

储存结构:若只进行求值操作,不改变多项式的系数或指数,那么用顺序结构更方便些。否则,用链式结构效率更高。我们采取连式结构。

储存多项式信息:从上图可以看出,一个多项式中的一项有系数、指数两项。所以在设计结点时,应有三个域:系数、指数、next

2.要实现的操作

1.两个多项式相加

在进行操作之前,我们可以先建一个新的链表(“和多项式”链表),用来保存相加的结果。

(1)指针qa所指结点的指数 == 指针qb所指结点的指数
将两个结点中的系数相加,若和不为0,则修改qa所指结点的指数值,同时释放qb所指结点。反之,从多项式A的链表中删除相应结点,并释放指针qa和qb结点的指数值。

(2)指针qa所指结点的指数 < 指针qb所指结点的指数
摘取qa指针所指结点插入到“和多项式”链表中去。

(3)指针qa所指结点的指数 > 指针qb所指结点的指数
摘取qa指针所指结点插入到“和多项式”链表中去。

2.输出结果

代码
#include <stdio.h>
#include <stdlib.h>

typedef struct LNode
{
   
	int num;
	int index;
	struct LNode *next;
}LNode;

typedef struct Link
{
   
	struct LNode *head;
	struct LNode *tail;
}*Link;

//初始化链表
void InitLink(Link L)
{
   
	L->head = (LNode*)malloc(sizeof(LNode));
	L->tail = (LNode*)malloc(sizeof(LNode));
	L->head->next = NULL;
	L->tail = L->head;
}

void show(Link L)
{
   
	LNode *q = L
  • 12
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一元多项式加法运算的C语言代码: #include <stdio.h> #include <stdlib.h> #define MAX_TERM 100 // 多项式的最大项数 typedef struct { float coef; // 系数 int expn; // 指数 } term; typedef struct { term data[MAX_TERM]; int len; } polynomial; void create_polynomial(polynomial *p) { // 创建多项式 printf("请输入多项式的项数:"); scanf("%d", &p->len); for (int i = 0; i < p->len; ++i) { printf("请输入第%d项的系数和指数:", i + 1); scanf("%f%d", &p->data[i].coef, &p->data[i].expn); } } void print_polynomial(polynomial p) { // 输出多项式 for (int i = 0; i < p.len; ++i) { if (p.data[i].coef > 0 && i > 0) { printf("+"); } printf("%.2fx^%d", p.data[i].coef, p.data[i].expn); } printf("\n"); } polynomial add_polynomial(polynomial p1, polynomial p2) { // 多项式加法 polynomial result = {0}; int i = 0, j = 0, k = 0; while (i < p1.len && j < p2.len) { if (p1.data[i].expn > p2.data[j].expn) { result.data[k++] = p1.data[i++]; } else if (p1.data[i].expn < p2.data[j].expn) { result.data[k++] = p2.data[j++]; } else { float sum = p1.data[i].coef + p2.data[j].coef; if (sum != 0) { result.data[k].coef = sum; result.data[k++].expn = p1.data[i].expn; } ++i; ++j; } } while (i < p1.len) { result.data[k++] = p1.data[i++]; } while (j < p2.len) { result.data[k++] = p2.data[j++]; } result.len = k; return result; } int main() { polynomial p1 = {0}, p2 = {0}, result = {0}; printf("请输入第一个多项式:\n"); create_polynomial(&p1); printf("请输入第二个多项式:\n"); create_polynomial(&p2); printf("第一个多项式为:"); print_polynomial(p1); printf("第二个多项式为:"); print_polynomial(p2); result = add_polynomial(p1, p2); printf("两个多项式相加的结果为:"); print_polynomial(result); return 0; } 在代码中,我们首先定义了一个term结构体表示多项式的一项,其中包括系数和指数两个成员变量。然后定义了一个polynomial结构体表示多项式,其中包括一个term类型的数组和一个表示多项式长度的len变量。 接着,我们实现了三个函数:create_polynomial用于创建多项式,print_polynomial用于输出多项式,add_polynomial用于实现多项式加法。 在main函数中,我们先分别创建了两个多项式p1和p2,然后输出它们,再调用add_polynomial函数求出它们的和result,并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值