首页 > 电脑

编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加的函数。

更新时间2018-10-21 09:30:52

【问题描述】编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加的函数。A,B刚开始是升序的,A与B之和按降序排列。例如:                              多项式A:  1.2X^0  2.5X^1  3.2X^3  -2.5X^5                             多项式B:  -1.2X^0  2.5X^1  3.2X^3   2.5X^5   5.4X^10                             多项式A与B之和:5.4X^10  6.4X^3  5X^1

【输入形式】任意两个多项式A和B

【输出形式】多项式中某一项的系数与指数,系数保留一位小数。 

【样例输入】1.2 0 2.5 1 3.2 3 -2.5 5                               -1.2 0 2.5 1 3.2 3 2.5 5 5.4 10                                2

【样例输出】6.4 3

【样例说明】

                                第一个多项式的系数与指数对,以空格隔开                                第二个多项式的系数与指数对,以空格隔开                                输出第2项的系数与指数,系数与指数间用空格隔开,系数保留一位小数

【评分标准】必须用链表实现。


#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef int ElemType;

/*单项链表的声明*/

typedef struct PolynNode{

int coef; // 系数

int expn; // 指数

struct PolynNode *next; }PolynNode,*PolynList;

/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/

/*指数系数一对一对输入*/ void CreatePolyn(PolynList &L,int n)

{

int i;

下载

原文档已转码为如下格式,以便移动设备查看

数据结构(c语言)用单链表存储一元多项式,并实现两个多项式的相加运算【最新】

阅读:1037次 页数:36页 2016-03-21 举报

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef int ElemType;

/*单项链表的声明*/

typedef struct PolynNode{

int coef; // 系数

int expn; // 指数

struct PolynNode *next; }PolynNode,*PolynList;

/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/

/*指数系数一对一对输入*/ void CreatePolyn(PolynList &L,int n)

{

int i;

PolynList p,q;

L=(PolynList)malloc(sizeof(PolynNode)); // 生成头结点

L->next=NULL;

q=L;

printf("成对输入%d个数据 ",n);

for(i=1;i<=n;i++)

{

p=(PolynList)malloc(sizeof(PolynNode));

scanf("%d%d",&p->coef,&p->expn); //指数和系数成对输入

q->next=p;

q=q->next;

}

p->next=NULL;

}

// 初始条件:单链表L已存在

// 操作结果: 依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败

void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) {

PolynList p=L->next;

while(p)

{

vi(p->coef, p->expn);

if(p->next)

{

printf(" + "); //“+”号的输出,最后一项后面没有“+”

}

p=p->next;

}

printf(" ");

}

/*ListTraverse()调用的函数(类型要一致)*/ void visit(ElemType c, ElemType e) {

if(c != 0)

{

printf("%dX^%d",c,e); //格式化输出多项式每一项

}

}

/* 多项式相加,原理:归并 */ /* 参数:两个已经存在的多项式 */ /* 返回值:归并后新的多项式的头结点 */

PolynList MergeList(PolynList La, PolynList Lb) {

PolynList pa, pb, pc, Lc;

pa = La->next;

pb = Lb->next;

Lc = pc = La; // 用La的头结点作为Lc的头结点

while(pa&&pb)

{

if(pa->expn < pb->expn)

{

pc->next = pa; //如果指数不相等,pc指针连上指数小的结

点,

pc = pa;

pa = pa->next; //指向该结点的指针后移

}

else if (pa ->expn > pb->expn )

{

pc->next = pb; //pc指针连上指数小的结点,

pc = pb;

pb = pb->next; //指向该结点的指针后移

}

else //(pa ->expn = pb->expn )

{

pa->coef = pa->coef + pb->coef; //指数相等时,系数相加

pc->next = pa;

pc = pa;

pa = pa->next; //两指针都往后移

pb = pb->next;

}

}

pc->next = pa ? pa:pb; // 插入剩余段

return Lc;

}

void main()

{

PolynList ha,hb,hc;

printf("非递减输入多项式ha, ");

CreatePolyn(ha,5); // 正位序输入n个元素的值

printf("非递减输入多项式hb, ");

CreatePolyn(hb,5); // 正位序输入n个元素的值


上一篇:alos-2同一track同一个frame怎么不一样

下一篇:各位大佬,麻烦帮我看看这个程序输出不出来