数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算,怎么做?

如题所述

#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",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("\n");

}

/*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个元素的值

温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加...
\/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*\/ \/*指数系数一对一对输入*\/ void CreatePolyn(PolynList &L,int n){ int i;下载 原文档已转码为如下格式,以便移动设备查看 数据结构(c语言)用单链表存储一元多项式,并实现两个多项式的相加运算【最新】阅读:1037次 页数:36...

数据结构c语言 用单链表储存一元多项式,并实现两个多项式的相加运算...
temp=(LinkList *)malloc(sizeof(LinkList)); \/\/新建一个结点 temp->data=b->data; \/\/将链表当前要复制的结点b复制到新结点中 last->next=temp; \/\/将新建的结点加到新链表的末端 last=temp; \/\/last指向尾结点,刚才新建的结点已成为新链表的尾结点 b=b->next; \/\/遍历链表...

C语言:用单链表实现任意两个一元多项式的加、减法运算
include <string.h> define N 7 typedef enum { add, nul, sub, div1, yu, l, r }OP;int a[N][N] = { { 0, 0, -1, -1, -1, 1, 2 },{ 0, 0, -1, -1, -1, 1, 2 },{ 1, 1, 0, 0, 0, 1, 2 },{ 1, 1, 0, 0, 0, 1, 2 },{ 1, 1...

用链式结构写两个一元多项式相加
\/\/用单链表实现多项式的运算 include<stdio.h> include<malloc.h> define MAX 5 \/\/定义结点 struct LinkList{ int coefficient;int power;LinkList *next;};\/\/创建链表 void CreateList(LinkList *&L,int a[],int b[], int n){ LinkList *s;int i;L=(LinkList *)malloc(sizeof(LinkLi...

设计一个一元多项式计算器,输入输出,多项式相加(C语言)
include<stdio.h>\/\/两个多项式也就是两个链表,相加后的链表我们不重新建立,而是在第一个链表的基础上,增加和删除,得到相加后的链表。include<malloc.h> typedef struct node { float cofe;\/\/系数 int expn;\/\/指数 struct node *next;}node,*tie;define LEN sizeof(node)int main(){ int n...

[内附完整源码和文档] 基于C语言实现的一元多项式的计算
一、概述 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数降序排列。二、需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果。三、概要设计 3.1 存储结构 一元多项式的表示在计算机内可以用...

用C语言实现数据结构的题目:一元多项式相加
注意:输入时,指数按升序输入 如: 1 1 2 2 3 3 0 0 2 2 3 3 0 0 结果:1 1 4 2 6 3 include <stdio.h> include <malloc.h> struct poly \/\/设置结构体 { int xi;int zhi;struct poly *next;};struct poly *jianli(void) \/\/建立链表 { struct poly *p1,*head1,*p2;he...

数据结构课程设计报告(一元多项式的计算)
void polyadd(node *pa, node *pb) \/*一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式pa中,并将多项式pb删除*\/ { node *p,*q,*pre,*temp;int sum;p=pa->next; \/*令p和q分别指向pa和pb多项式链表中的第一个结点*\/ q=pb->next;pre=pa; \/*位置指针,指向和多项式...

多项式相加 一条单链表可以表示一个一元多项式,每个节点包含三个域:指...
结构体 int a float b point !c 先比较两个多项式的最高项,以最高项高的为主多项式,另一多项式为辅。指数依次下降,如果都有该指数项,该项各自b相加,如果主没有,辅有,把该辅项插入主项,如果主有,辅没有,链条不变,指数继续下降 重复该过程,直至指数项为0 ...

数据结构(c++)一元多项式的代数运算
cout<<"\\t\\t 1创建要运算的两个一元多项式"<<endl; cout<<"\\t\\t 2将两个一元多项式相加"<<endl; cout<<"\\t\\t 3将两个一元多项式相减"<<endl; cout<<"\\t\\t 4将两个一元多项式相乘"<<endl; cout<<"\\t\\t 5显示两个一元多项式"<<endl; cout<<"\\t\\t 6销毁所创建的二个多项式"<<endl; cou...

相似回答