# 多项式求和C语言实现

### 数据结构：

typedef struct Node *PNode;		                            //节点指针类型
struct Node{
int exp;						    //存储每一项的指数
float coe;						    //存储每一项的系数
PNode next;						    //指向下一项（下一个节点）
};


### 函数：

##### 创建多项式：
PNode createpoly()
{
PNode h = NULL, p = NULL, q;                        //h为指向链表第一个结点的指针（即指向链表的指针）
int e;
float c;                                            //e,c相当于一个中介，通过e,c向结点中存储数据,
printf("请输入系数和指数(指数从大到小)：\n");
scanf("%f,%d",&c,&e);
while (e != 0 || c != 0)
{
p = (PNode)malloc(sizeof(struct Node));      //先创建一个结点
p->coef = c;
p->exp = e;
p->next = NULL;                               //指向下一个结点的指针先定义为空
if (h == NULL)
h = p;
else
q->next = p;
q = p;
printf("请输入系数和指数：\n");
scanf("%f,%d",&c,&e);
}
return h;                                            //返回头指针
}

#### 求和函数：

PNode addpoly(PNode h1, PNode h2)
{
PNode p, r = NULL, s1, s2, s = NULL;
float c;
int e;
s1 = h1;
s2 = h2;
while (s1 != NULL&&s2 != NULL)
{
if (s1->exp == s2->exp)
{
c = s1->coef+s2->coef;
e = s1->exp;
s1 = s1->next;
s2 = s2->next;
}
else if (s1->exp > s2->exp)
{
c = s1->coef;
e = s1->exp;
s1 = s1->next;
}
else
{
c = s2->coef;
e = s2->exp;
s2 = s2->next;
}
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
while (s1 != NULL)
{
c = s1->coef;
e = s1->exp;
s1 = s1->next;
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
while (s2 != NULL)
{
c = s2->coef;
e = s2->exp;
s2 = s2->next;
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
return s;
}


#### 打印多项式：

void  outputpoly(PNode h)
{
PNode p;
p = h;
while (p != NULL)
{
if (p->exp == 0)
printf("%.2f",p->coef);
else
{
printf("%.2fx^%d",p->coef,p->exp);
}
p = p->next;
if (p != NULL)
printf("+");
}
printf("\n");
}

#### 删除：

void deletepoly(PNode h)
{
PNode p, r = h;
while (r != NULL)
{
p = r->next;
free(r);
r = p;
}
}

### 完整程序：

#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PNode;
struct Node{
float coef;
int exp;
PNode next;
};

PNode createpoly()
{
PNode h = NULL, p = NULL, q;
int e;
float c;
printf("请输入系数和指数(指数从大到小)：\n");
scanf("%f,%d",&c,&e);
while (e != 0 || c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (h == NULL)
h = p;
else
q->next = p;
q = p;
printf("请输入系数和指数：\n");
scanf("%f,%d",&c,&e);
}
return h;
}

void  outputpoly(PNode h)
{
PNode p;
p = h;
while (p != NULL)
{
if (p->exp == 0)
printf("%.2f",p->coef);
else
{
printf("%.2fx^%d",p->coef,p->exp);
}
p = p->next;
if (p != NULL)
printf("+");
}
printf("\n");
}

{
PNode p, r = NULL, s1, s2, s = NULL;
float c;
int e;
s1 = h1;
s2 = h2;
while (s1 != NULL&&s2 != NULL)
{
if (s1->exp == s2->exp)
{
c = s1->coef+s2->coef;
e = s1->exp;
s1 = s1->next;
s2 = s2->next;
}
else if (s1->exp > s2->exp)
{
c = s1->coef;
e = s1->exp;
s1 = s1->next;
}
else
{
c = s2->coef;
e = s2->exp;
s2 = s2->next;
}
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
while (s1 != NULL)
{
c = s1->coef;
e = s1->exp;
s1 = s1->next;
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
while (s2 != NULL)
{
c = s2->coef;
e = s2->exp;
s2 = s2->next;
if (c != 0)
{
p = (PNode)malloc(sizeof(struct Node));
p->coef = c;
p->exp = e;
p->next = NULL;
if (s == NULL)
s = p;
else
r->next = p;
r = p;
}
}
return s;
}

void deletepoly(PNode h)
{
PNode p, r = h;
while (r != NULL)
{
p = r->next;
free(r);
r = p;
}
}

void main()
{
}