A.单链表的应用——一元多项式相加 题目:一元多项式pn(x)=p0+p1x+p2x2+……pnxn 在计算机中,可以用线性
答案:1 悬赏:40 手机版
解决时间 2021-11-19 14:59
- 提问者网友:鼻尖触碰
- 2021-11-18 20:51
A.单链表的应用——一元多项式相加 题目:一元多项式pn(x)=p0+p1x+p2x2+……pnxn 在计算机中,可以用线性
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-11-18 22:05
#include
#include
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
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);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯