第04周12--2.8案例分析与实现2--稀疏多项式运算_哔哩哔哩_bilibili
任务要求:
#include <stdio.h>
#include <stdlib.h>
typedef struct Pnode
{
float coef;
int expn;
struct Pnode *next;
}Pnode,*Polynomial;
//创建一个尾插法的列表
void CreaList_R(Polynomial *L,int n)
{
(*L) =(Pnode*)malloc(sizeof(Pnode));
//此处需要一个尾指针
Pnode *r = *L;
for(int i = 0;i<n; i++)
{
Pnode *p =(Pnode*)malloc(sizeof(Pnode));
p->next = NULL;
r->next = p;
r = p;
printf("输入系数");
scanf("%f",&(p->coef));
printf("输入指数");
scanf("%d",&(p->expn));
}
}
void print_L(Polynomial L)
{
Pnode *p = L->next;
while (p)
{
printf("系数:%f,指数:%d\t",p->coef,p->expn);
p=p->next;
}
}
void compare(Polynomial *L1,Polynomial *L2)
{
Pnode *p1 = (*L1)->next;
Pnode *p2 = (*L2)->next;
Pnode *p3 = (*L1);
while (p1 && p2)
{
if(p1->expn == p2->expn)
{
if (p1->coef+p2->coef == 0)
{
p1=p1->next;
p2=p2->next;
}
else {
p1->coef = p1->coef+p2->coef;
p3->next = p1;
p3 = p3->next;
p1 = p1->next;
p2 = p2->next;
}
}
else if(p1->expn > p2->expn)
{
p3->next = p2;
p3 = p3->next;
p2 = p2->next;
}
else{
p3->next = p1;
p3 = p3->next;
p1 = p1->next;
}
}
while(p1) {
p3->next = p1;
p3 = p3->next;
p1 = p1->next;
}
while(p2) {
p3->next = p2;
p3 = p3->next;
p2 = p2->next;
}
}
int main()
{
Polynomial L1,L2;
int n =0;
printf("你想要输出的列表长度");
scanf("%d",&n);
CreaList_R(&L1,n);
print_L(L1);
printf("\n你想要输出的列表长度");
scanf("%d",&n);
CreaList_R(&L2,n);
print_L(L2);
compare(&L1,&L2);
printf("\n");
print_L(L1);
}
可以尝试在里面free掉我们不要的块。这里我没free掉。
今天稍晚一点再出解析,de了一晚上bug该睡了