#include<stdlib.h>
#include<stdio.h>
struct List{
int coef;//係數
int expn;//冪
struct List * next;
};
typedef struct List * Link;
typedef struct List Lnode;
/*創建鏈表*/
Link create()
{
int a, n, i = 1;
Link head, s, p;
head = (Link)malloc(sizeof(Lnode));
head->next = NULL;
p = head;
do{
printf("\n第%d次->係數,冪:",i++);
scanf("%d %d", &a, &n);
if (a != 0 || n != 0)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = a;
s->expn = n;
s->next = NULL;
p->next = s;
p = s;
}
} while (a != 0 || n != 0);
printf("\n");
return head->next;
}
/*進行相加操作*/
Link add(Link pa, Link pb)
{
int n;
Link pc, s, p;
pc = (Link)malloc(sizeof(Lnode));
pc->next = NULL;
p = pc;
while (pa != NULL&&pb != NULL)
{
if (pa->expn > pb->expn)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = pa->coef;
s->expn = pa->expn;
s->next = NULL;
p->next = s;
p = s;
pa = pa->next;
}
else if (pa->expn < pb->expn)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = pb->coef;
s->expn = pb->expn;
s->next = NULL;
p->next = s;
p = s;
pb = pb->next;
}
else
{
n = pa->coef + pb->coef;
if (n != 0)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = n;
s->expn = pb->expn;
s->next = NULL;
p->next = s;
p = s;
}
pa = pa->next;
pb = pb->next;
}
}
while (pa != NULL)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = pa->coef;
s->coef = pa->coef;
s->next = NULL;
p->next = s;
p = s;
pa = pa->next;
}
while (pb != NULL)
{
s = (Link)malloc(sizeof(Lnode));
s->coef = pb->coef;
s->coef = pb->coef;
s->next = NULL;
p->next = s;
p = s;
pb = pb->next;
}
return pc->next;
}
void display(Link head)
{
int first = 1;
Link p = head;
while (p != NULL)
{
if (first)//顯示第一個結點時,不顯示+號
{
if (p->expn == 1)
{
printf("%dx", p->coef);
}
else if (p->expn == 0)
{
printf("%d", p->coef);
}
else
{
printf("%dx^%d", p->coef, p->expn);
}
first = 0;
}
else//顯示其他的結點,顯示+號
{
if (p->expn == 1)
{
printf("+%dx", p->coef);
}
else if (p->expn == 0)
{
printf("+%d", p->coef);
}
else
{
printf("+%dx^%d", p->coef, p->expn);
}
}
p = p->next;
}
printf("\n");
}
int main()
{
Link Link1, Link2, Link3;
Link1 = create();
Link2 = create();
Link3 = add(Link1, Link2);
display(Link1);
display(Link2);
display(Link3);
system("pause");
return 0;
}
數據結構——兩個一元多項式之和
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.