多项式相加
key words
- 动态链表的创建
- 动态链表的合并和插入
- 链表的传参(这个问题暂时没有具体说明,以后再仔细总结)
这是一道学生的上机作业,这段代码还有很多的问题,比如说建立链表的时候可能是无序的等,此外这段代码中的传参还有点问题,其他的都还好。
#include <stdio.h>
#include <stdlib.h>
typedef struct poly {
float coef; //系数
int exp; //指数
struct poly *next;
} Linklist;
int lengthA, lengthB;
int i, exp1;
float coef1;
Linklist *A, *B, *L, *p, *q, *rr;
Linklist *s, *r;
Linklist *p1, *q1, *r1, *s1, *C1;
void PolyPrint(Linklist *r) {
while (r != NULL) {
printf("%fx^%d+", r->coef, r->exp);
r = r->next;
}
printf("\n");
}
void PlusPoly(Linklist *L, Linklist *A, Linklist *B) {
C1 = (Linklist *) malloc(sizeof(Linklist));
r1 = C1;
p1 = A->next;
q1 = B->next;
while (p1 != NULL && q1 != NULL) {
if (p1->exp == q1->exp) {
if ((p1->coef + q1->coef) != 0) {
s1 = (Linklist *) malloc(sizeof(Linklist));
s1->coef = p1->coef + q1->coef;
s1->exp = p1->exp;
r1->next = s1;
r1 = s1;
p1 = p1->next;
q1 = q1->next;
} else {
p1 = p1->next;
q1 = q1->next;
}
} else {
if ((p1->exp) < (q1->exp)) {
s1 = (Linklist *) malloc(sizeof(Linklist));
s1->coef = q1->coef;
s1->exp = q1->exp;
r1->next = s1;
r1 = s1;
q1 = q1->next;
} else {
s1 = (Linklist *) malloc(sizeof(Linklist));
s1->coef = p1->coef;
s1->exp = p1->exp;
r1->next = s1;
r1 = s1;
p1 = p1->next;
}
}
}
while (p1 != NULL) {
s1 = (Linklist *) malloc(sizeof(Linklist));
s1->coef = p1->coef;
s1->exp = p1->exp;
r1->next = s1;
r1 = s1;
p1 = p1->next;
}
while (q1 != NULL) {
s1 = (Linklist *) malloc(sizeof(Linklist));
s1->coef = q1->coef;
s1->exp = q1->exp;
r1->next = s1;
r1 = s1;
q1 = q1->next;
}
r1->next = NULL;
}
int main(void) {
printf("多项式A的项数为:");
scanf("%d", &lengthA);
printf("\n");
printf("多项式B的项数为:");
scanf("%d", &lengthB);
printf("\n");
// CreatePoly(lengthA,A);
//CreatePoly(lengthB,B);
//
//创建A链表
A = (Linklist *) malloc(sizeof(Linklist));
A->next = NULL;
r = A;
for (i = 0; i < lengthA; i++) {
s = (Linklist *) malloc(sizeof(Linklist));
printf("多项式的第%d个系数是:", i + 1);
scanf("%f", &coef1);
printf(" ");
printf("多项式的第%d个指数是:", i + 1);
scanf("%d", &exp1);
printf("\n");
s->coef = coef1;
s->exp = exp1;
r->next = s;
r = s;
}
r->next = NULL;
//创建B链表
B = (Linklist *) malloc(sizeof(Linklist));
B->next = NULL;
r = B;
for (i = 0; i < lengthB; i++) {
s = (Linklist *) malloc(sizeof(Linklist));
printf("多项式的第%d个系数是:", i + 1);
scanf("%f", &coef1);
printf(" ");
printf("多项式的第%d个指数是:", i + 1);
scanf("%d", &exp1);
printf("\n");
s->coef = coef1;
s->exp = exp1;
r->next = s;
r = s;
}
r->next = NULL;
PlusPoly(L, A, B);
//输出多项式
{
rr = A->next;
printf("多项式A为:");
PolyPrint(rr);
rr = B->next;
printf("多项式B为:");
PolyPrint(rr);
rr = C1->next;
printf("多项式C为:");
PolyPrint(rr);
}
return 0;
}