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