A.单链表的应用——一元多项式相加 题目:一元多项式pn(x)=p0+p1x+p2x2+……pnxn 在计算机中,可以用线性

表( (7, 3), (-2, 12), (-8, 999) )来表示
typedef struct node
{
float coef; //系数
int expn; //指数
struct node next;
} PolyNode;

A17(x)=7+3X+9X8+5X17
B17(x)=8X+22X7-9X8
求C=A+B,输出C
(要求些完整)

/*链表的应用---多项式加法*/

#include <stdio.h>
#include <stdlib.h>

typedef struct LNode
{
int data; //存储系数
int flag; //存储对应幂数
struct LNode *next;
}LNode;

//建立带头结点的单链表,n项多项式
void CreateList(LNode **L, int n)
{
LNode *p;
int i = 0;

*L = (LNode *) malloc (sizeof(LNode));
(*L)->next = NULL; //先建立一个带头结点的单链表

for (i = 0; i<n; ++i)
{
p = (LNode *) malloc (sizeof(LNode)); //生成新结点
scanf("%d%d",&(p->data),&(p->flag)); //获取系数及幂次
p->next = (*L)->next; (*L)->next = p; //插入链表
}

}

void PolyoAdd(LNode **L1, LNode **L2) //多项式L1与L2对应项相加得到新的L2
{
int ck;
LNode *p,*q,*temp,*head;
p = NULL;
q = NULL;
temp = NULL;

head = (LNode *) malloc (sizeof(LNode));
head->next = NULL;

q = (*L1)->next;
while(q)
{
ck = 0;

p = (*L2)->next;
while(p)
{
if (q->flag == p->flag)
{
ck = 1;
break;
}
p = p->next;
}
if (ck == 1) //同类项合并
{
p->data += q->data;
q = q->next;
}

else //否则,直接添加到另一个多项式head
{
(*L1)->next = q->next;
q->next = NULL;
temp = q;
temp->next = head->next;
head->next = temp;
q = (*L1)->next;
}
}

if (temp) //若存在新多项式head,则连接L2和head
{
while(temp->next)
temp = temp->next;
temp->next = (*L2)->next;
(*L2) = head;
}
}

void PolyoPrint(LNode **L) //纯粹是为了打印界面
{
LNode *p;
p = (*L)->next;
printf("多项式为\t");
printf("%d*x^%d",p->data,p->flag);
p = p->next;
while(p)
{
printf("+(%d*x^%d)",p->data,p->flag);
p = p->next;
}
printf("\n");
}

void main()
{
int m=0;
LNode *p1,*p2;
p1 = NULL;
p2 = NULL;
printf("设定多项式项数:\n");
scanf("%d",&m);
printf("请输入多项式系数及对应位幂次:\n");
CreateList(&p1,m);
PolyoPrint(&p1);

printf("设定多项式项数:\n");
scanf("%d",&m);
printf("请输入多项式系数及对应位幂次:\n");
CreateList(&p2,m);
PolyoPrint(&p2);
PolyoAdd(&p1,&p2);
PolyoPrint(&p2);

}
温馨提示:答案为网友推荐,仅供参考
相似回答