希望学长的代码能给大二西电er们带来帮助(大家一定要好好学习数据结构,合理利用资源)
大家找到了什么bug或有什么改进意见可以私信我或在下方留言,我都会看的
不多说废话直接上代码
#include<malloc.h>
#include<stdio.h>
//多项式单链表结构类型定义
typedef struct node
{
int coef;
int exp;
struct node* next;
}linklist;
linklist* init()
{
linklist* head = (linklist*)malloc(sizeof(linklist));
head->coef = 0;
head->exp = -1;
head->next = NULL;
return head;
}
linklist* create()
{
int coef;
int exp;
linklist* head = init();
linklist* s, * r;
r = head;
while (1)
{
scanf("%d %d", &coef, &exp);
if (coef != 0)//输入0 0来结束输入
{
s = (linklist*)malloc(sizeof(linklist));
s->coef = coef;//s用来保存当前节点
s->exp = exp;
r->next = s;
r = s;
}
else
break;
}
r->next = NULL;//尾插法建立单链表
return head;
}
void print(linklist* head)// 输出多项式信息
{
linklist* p;
p = head->next;
if (p == NULL) {
printf("表空\n");
return;
}
while (p != NULL)
{
printf("(%d,%d),", p->coef, p->exp);
p = p->next;
}
printf("\n");
}
linklist* sum(linklist* pa, linklist* pb)//进行多项式相加
{
linklist* p, * q, * r, * s;
int x;
p = pa->next;//分别指向多项式的第一项
q = pb->next;
s = pa;//s用于保存当前节点
while ((p != NULL) && (q != NULL))
{
if (p->exp < q->exp)//p的指数小于q的指数,将p放入链表中
{
s = p;
p = p->next;
}
else if (p->exp > q->exp)//p的指数大于q的指数,将q放入链表中
{
r = q->next;
q->next = p;
s->next = q;
s = q;
q = r;
}
else//当两者指数相同时,进行合并
{
x = p->coef + q->coef;
if (x != 0)
{
p->coef = x;
s = p;
}
else//若合并结果为0,将该节点移除
{
s->next = p->next;
free(p);
}
p = s->next;
r = q;
q = q->next;
free(r);
}
}
if (p)
s->next = p;
else
s->next = q;
return pa;
}
linklist* copy(linklist* L)
{
linklist* NL = init();//新链表初始化
linklist* pb = NL; //新链表还没有值,指向头指针
linklist* pa = L->next;
while (pa != NULL)
{
linklist* l = new linklist; //为新节点开辟内存空间
l->coef = pa->coef;
l->exp = pa->exp;
//尾插法
l->next = NULL;
pb->next = l;
//保证指针始终指向最后一个节点
pb = pb->next;
pa = pa->next;
}
return NL;
}
void SumOfPoly(linklist* pa, linklist* pb) {
pa = sum(pa, pb);
pb->next = NULL;
}
int main()
{
linklist* A, * B, * C, * D, * E;
printf("**************请输入原多项式A链表为*****************\n");
A = create();
D = copy(A);
printf("**************请输入原多项式B链表为*****************\n");
B = create();
E = copy(B);
printf("\n**************显示原多项式A链表为*****************\n");
print(A);
printf("\n**************显示原多项式B链表为*****************\n");
print(B);
//C = sum(D, E);//调用多项式求和的函数
SumOfPoly(A, B);
printf("\n**************显示求和运算之后的多项式A链表为*****************\n");
print(A);
printf("\n**************显示求和运算之后的多项式B链表为*****************\n");
print(B);
//printf("\n**************显示求和运算之后的多项式之和C链表为*****************\n");
//print(C);
}