#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...