如题:
采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。
实现程序:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node{
float coef;//系数
int expn;//指数
struct node *next;
}LinkNode,*LinkList;
LinkList Create(int n)
{
LinkNode *head;
head = (LinkNode *)malloc(sizeof(LinkNode)); //申请头结点空间
head->next = NULL;
LinkNode *q;
q = head;
float coef;
int expn;
for(int i = 1;i <= n;i++)
{
printf("%s","请输入系数:");
scanf("%f",&coef);
printf("%s","请输入指数:");
scanf("%d",&expn);
LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
p->coef = coef;
p->expn = expn;
q->next = p;
q = p;
}
q->next = NULL;
return head;
}
void Print(LinkList L)
{
LinkNode *p = L->next;
while(p != NULL)
{
printf("系数:%f",p->coef);
printf("指数:%d\n",p->expn);
p = p->next;
}
}
LinkList Add(LinkList pa,LinkList pb)
{
LinkNode *pc;
pc = (LinkNode *)malloc(sizeof(LinkNode));
pc->next = NULL;
LinkNode *p,*q,*tmp;
p = pa->next;
q = pb->next;
tmp = pc;
while(p&&q)
{
if(p->expn > q->expn)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->expn = p->expn;
s->coef = p->coef;
tmp->next = s;
tmp = s;
p = p->next;
}
else if(p->expn < q->expn)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->expn = q->expn;
s->coef = q->coef;
tmp->next = s;
q = q->next;
tmp = s;
}
else
{
if(p->coef + q->coef != 0)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s -> coef = q->coef + p->coef;
s ->expn = p->expn;
tmp->next = s;
tmp = s;
}
p = p->next;
q = q->next;
}
}
if(p)
{
while(p)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s -> coef = p->coef;
s ->expn = p->expn;
tmp->next = s;
tmp = s;
p = p->next;
}
}
if(q)
{
while(q)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s -> coef = q->coef;
s ->expn = q->expn;
tmp->next = s;
tmp = s;
q = q->next;
}
}
tmp->next = NULL;
return pc;
}
void Sort(LinkList L)
{
LinkNode *p,*q,*pre;
p = L->next;
L->next = NULL;
while (p!=NULL)
{
if (L->next==NULL) /*处理第1个结点*/
{
L->next = p;
p = p->next;
L->next->next=NULL;
}
else /*处理其余结点*/
{
pre = L;
q = pre->next;
while (q!=NULL && p->expn < q->expn)
{
pre = q;
q = q->next;
}
q = p->next;
p->next = pre->next;
pre->next = p;
p = q;
}
}
}
int main()
{
LinkList pa,pb,pc;
int n,m;
printf("请输入pa的项数:\n");
scanf("%d",&n);
pa = Create(n);
printf("%s\n","Pa:");
Sort(pa);
Print(pa);
printf("请输入pb的项数:\n");
scanf("%d",&m);
pb = Create(m);
printf("%s\n","Pb:");
Sort(pb);
Print(pb);
pc = Add(pa,pb);
printf("%s\n","pa+pb:");
Print(pc);
}
如有问题,欢迎指正~