数据结构与算法-实验1-多项式的计算:合并同类项、升幂排序、多项式加法、减法、乘法

本文通过C++实现多项式计算,包括合并同类项、按指数升幂排序、加法、减法和乘法。代码展示了如何创建、合并、排序和操作多项式,涉及数据结构与算法的应用。
摘要由CSDN通过智能技术生成

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

using namespace std;

//多项式的项

typedef struct polynomial     //定义struct类型数据

{

int n;                    //统计链表中元素个数

int coef, index;          //每一项系数及指数

struct polynomial *next;  //指向下一项的指针

}POLY;

POLY *Create_poly(void);

POLY *Sort_poly(POLY *head);     //对多项式按升幂顺序排

POLY *Tidy_poly(POLY *head);     //对多项式合并同类项

POLY *Add_poly(POLY *, POLY *);  //多项式加法

POLY *Dec_poly(POLY *, POLY *);  //多项式减法

POLY *Mul_poly(POLY *, POLY *);  //多项式乘法

void Print_poly(POLY *);

 

int main(void)

{

POLY *heada = NULL, *headb = NULL, *headsum = NULL, *headmul = NULL;

printf("创建第一个多项式:\n");

heada = Create_poly();

printf("创建第二个多项式:\n");

headb = Create_poly();

printf("第一个多项式是:\n");

Print_poly(heada);

printf("第二个多项式是:\n");

Print_poly(headb);

headsum = Add_poly(heada, headb);

printf("两多项式相加结果是:");

Print_poly(headsum);

headsum = Dec_poly(heada, headb);

printf("两多项式相减结果是:");

Print_poly(headsum);

headmul = Mul_poly(heada, headb);

printf("两多项式相乘结果是:");

Print_poly(headmul);

return 0;

}

 

//创建

POLY *Create_poly()

{

int count = 0;                                //数据节点个数计数

int  coef = 0, index = 0;

POLY *head = NULL, *s = NULL, *r = NULL;

head = (POLY *)malloc(sizeof(POLY));     //申请新节点空间,头节点

r = head;

printf("请输入多项式每一项的系数及其对应的指数(以0 0结束):\n");

scanf_s("%d%d", &coef, &index);

while (coef != 0)

{

s = (POLY *)malloc(sizeof(POLY));

s->coef = coef, s->index = index;

r->next = s;

r = s;                             //移动的节点,起针的作用

count++;

scanf_s("%d%d", &coef, &index);

}

r->next = NULL;

head->n = count;

head = Tidy_poly(head);

return head;

}

//合并同类项

POLY *Tidy_poly(POLY *head)

{

int p2start = 0;

POLY *p1 = NULL, *p2 = NULL, *p2p = NULL;

if (head == NULL){ return NULL; }       //如果传进的是空表,则返回空

if (head->next == NULL){ return head; } //如果传进的是只有一个节点的表,则直接返回此表

 

p1 = p2 = p2p = head;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值