//定义多项式最大项数
#include<stdio.h>
#include<malloc.h>
#define MAX 20
//定义存放多项式的数组类型
typedef struct{
float coef;
int exp;
}PolyArray[MAX];
//定义单链表结点类型
typedef struct pnode{
float coef;
int exp;
struct pnode *next;
}PolyNode;
//输出多项式链表
void DispPoly(PolyNode *L){
PolyNode *p = L->next;
while (p != NULL){
printf("%gX^%d", p->coef, p->exp);
p = p->next;
}
printf("\n");
}
//一元多项式的表示
//建立多项式链表)
void createListR(PolyNode *L, PolyArray a, int n){
PolyNode *s, *r;
int i;
L = (PolyNode *)malloc(sizeof(PolyNode));
L->next = NULL;
r = L;
for (i = 0; i<n; i++){
s = (PolyNode*)malloc(sizeof(PolyNode));
s->coef = a[i].coef;
s->exp = a[i].exp;
s->next = NULL;
r->next = s;
r = s;
}
r->next = NULL;
}
//原多项式链表排序
void sort(PolyNode *head)
{
PolyNode *p = head->next, *q, *r;
if (p != NULL)
{
r = p->next;
p->next = NULL;
p = r;
while (p != NULL){
r = p->next;
q = head;
while (q->next != NULL && q->next->exp >p->exp)
q = q->next;
p->next = q->next;
q->next = p;
p = r;
}
}
}
//一元多项式的相加
void add(PolyNode *ha, PolyNode *hb, PolyNode *hc)
{
PolyNode*pa = ha->next, *pb = hb->next, *s, *tc;
float c;
hc = (PolyNode*)malloc(sizeof(PolyNode));
tc = hc;
while (pa != NULL && pb != NULL)
{
if (pa->exp > pb->exp)
{
s = (PolyNode*)malloc(sizeof(PolyNode));
s->exp = pa->exp; s->coef = pa->coef;
s->next = NULL;
tc->next = s;
tc = s;
pa = pa->next;
}
else if (pa->exp <pb->exp)
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->exp = pb->exp;
s->coef = pb->coef;
s->next = NULL;
tc->next = s;
tc = s;
pb = pb->next;
}
else {
c = pa->coef + pb->coef;
if (c)
{
s = (PolyNode *)malloc(sizeof(PolyNode));
s->exp = pa->exp;
s->coef = c;
s->next = NULL;
tc->next = s; tc = s;
}
pa = pa->next;
pb = pb->next;
}
}
if (pb != NULL)
pa = pb;
while (pa != NULL)
{
s = (PolyNode*)malloc(sizeof(PolyNode));
s->exp = pa->exp;
s->coef = pa->coef;
s->next = NULL;
tc->next = s;
tc = s;
pa = pa->next;
}
tc->next = NULL;
}
//主函数的设定及调用
void main(){
PolyNode *ha, *hb, *hc;
PolyArray a = { { 1.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 } };
PolyArray b = { { 3.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 }, { 5.4, 10 } };
createListR(ha, a, 4);
createListR(hb, b, 5);
printf("原多项式A :"); DispPoly(ha);
printf("原多项式 B :"); DispPoly(hb);
sort(ha);
sort(hb);
printf("有序多项式A :");
DispPoly(ha);
printf("有序多项式B :");
DispPoly(hb);
add(ha, hb, hc);
printf("多项式相加:");
DispPoly(hc);
}
//定义多项式最大项数
#include<stdio.h>
#include<malloc.h>
#define MAX 20
//定义存放多项式的数组类型
typedef struct{
float coef;
int exp;
}PolyArray[MAX];
//定义单链表结点类型
typedef struct pnode{
float coef;
int exp;
struct pnode *next;
}PolyNode,*linklist;
//输出多项式链表
void DispPoly(linklist L){
linklist p = L->next;
while (p != NULL){
printf("%gX^%d", p->coef, p->exp);
p = p->next;
}
printf("\n");
}
//一元多项式的表示
//建立多项式链表)
void createListR(linklist &L, PolyArray a, int n){
linklist s, r;
int i;
L = (linklist)malloc(sizeof(PolyNode));
L->next = NULL;
r = L;
for (i = 0; i<n; i++){
s = (linklist)malloc(sizeof(PolyNode));
s->coef = a[i].coef;
s->exp = a[i].exp;
s->next = NULL;
r->next = s;
r = s;
}
r->next = NULL;
}
//原多项式链表排序
void sort(linklist head)
{
linklist p = head->next, q, r;
if (p != NULL)
{
r = p->next;
p->next = NULL;
p = r;
while (p != NULL){
r = p->next;
q = head;
while (q->next != NULL && q->next->exp >p->exp)
q = q->next;
p->next = q->next;
q->next = p;
p = r;
}
}
}
//一元多项式的相加
void add(linklist ha, linklist hb, linklist hc)
{
linklist pa = ha->next, pb = hb->next, s, tc;
float c;
hc = (linklist)malloc(sizeof(PolyNode));
tc = hc;
while (pa != NULL && pb != NULL)
{
if (pa->exp > pb->exp)
{
s = (linklist)malloc(sizeof(PolyNode));
s->exp = pa->exp; s->coef = pa->coef;
s->next = NULL;
tc->next = s;
tc = s;
pa = pa->next;
}
else if (pa->exp <pb->exp)
{
s = (linklist)malloc(sizeof(PolyNode));
s->exp = pb->exp;
s->coef = pb->coef;
s->next = NULL;
tc->next = s;
tc = s;
pb = pb->next;
}
else {
c = pa->coef + pb->coef;
if (c)
{
s = (linklist)malloc(sizeof(PolyNode));
s->exp = pa->exp;
s->coef = c;
s->next = NULL;
tc->next = s; tc = s;
}
pa = pa->next;
pb = pb->next;
}
}
if (pb != NULL)
pa = pb;
while (pa != NULL)
{
s = (linklist)malloc(sizeof(PolyNode));
s->exp = pa->exp;
s->coef = pa->coef;
s->next = NULL;
tc->next = s;
tc = s;
pa = pa->next;
}
tc->next = NULL;
}
//主函数的设定及调用
void main(){
linklist ha, hb, hc;
PolyArray a = { { 1.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 } };
PolyArray b = { { 3.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 }, { 5.4, 10 } };
createListR(ha, a, 4);
createListR(hb, b, 5);
printf("原多项式A :"); DispPoly(ha);
printf("原多项式 B :"); DispPoly(hb);
sort(ha);
sort(hb);
printf("有序多项式A :");
DispPoly(ha);
printf("有序多项式B :");
DispPoly(hb);
add(ha, hb, hc);
printf("多项式相加:");
DispPoly(hc);
}
C语言数据结构一元多项式
最新推荐文章于 2023-01-17 08:08:11 发布