严蔚敏2.4部分实现

//Polynomal_Head.h#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>typedef int Status;
typedef int ElemType;typedef struct PNode //多项式节点
{float coef;int   expn;struct PNode *next;
}PNode, *PList;typedef struct PHead  //多项式头节点
{int len;struct PNode *next;
}PHead, *PListHead;void InsertPolynList(PListHead, float, int);
PListHead GetPolynListHead();
PList GetPolynList();
void CreatPolyn(PListHead, int);
void DispPolyn(PListHead);
int  PolynLength(PListHead);
PListHead AddPolyn(PListHead, PListHead);
//void SubstractPolyn(PListHead, PListHead);
//void MultiplPolyn(PListHead, PListHead);
//int cmp(PNode, PNode);
// Polynomal.c#include "Polynormal_Head.h"PListHead GetPolynListHead()
//用于获取多项式头节点
{PListHead plh = (PListHead)malloc(sizeof(PHead));plh->len  = 0;plh->next = NULL;return plh;
}PList GetPolynList()
//用于获取多项式节点
{PList pl = (PList)malloc(sizeof(PNode));pl->coef = 0;pl->expn = 0;pl->next = NULL;return pl;
}void InsertPolynList(PListHead plh, float c, int e)
//向多项式中添加节点,能够实现自动排序,自动识别指数相等节点。
{if (plh->len == 0 || plh->next->expn > e){PList t = GetPolynList();t->coef = c; t->expn = e;t->next = plh->next; plh->next = t;plh->len++;return ;}else if (plh->next->expn == e){plh->next->coef += c;return ;}else if (plh->len == 1){PList t = GetPolynList();t->coef = c; t->expn = e;plh->next->next = t; t->next = NULL;plh->len++;return ;}PList p = plh->next;while (p->next && p->next->expn < e){p = p->next;}if (p->next && p->next->expn == e){p->next->coef += c;return ;}PList t = GetPolynList();t->coef = c; t->expn = e;t->next = p->next; p->next = t;plh->len++;
}void CreatPolyn(PListHead plh, int n)
// 利用InsertPolynList()创建新多项式,输入n对数据。
{int e; float c;for (int i = 0; i < n; ++i){scanf("%f", &c); scanf("%d", &e);InsertPolynList(plh, c, e);}
}void DispPolyn(PListHead plh)
// 输出多项式(用于调试)。
{printf("Total %d nodes.\n", plh->len);PList pl = plh->next;while (pl){printf("%f x %d\n", pl->coef, pl->expn); pl = pl->next;}
}int  PolynLength(PListHead plh)
// 返回多项式的项数。
{return plh->len;
}PListHead AddPolyn(PListHead plh1, PListHead plh2)
//  将两个多项式相加,结果新建一个多项式并返回。
{PListHead plh3 = GetPolynListHead();PList pl1 = plh1->next, pl2 = plh2->next;PList p = GetPolynList(); plh3->next = p;while (pl1 && pl2){if (pl1->expn < pl2->expn){InsertPolynList(plh3, pl1->coef, pl1->expn);pl1 = pl1->next;}else if (pl1->expn > pl2->expn){InsertPolynList(plh3, pl2->coef, pl2->expn);pl2 = pl2->next;}else{InsertPolynList(plh3, pl1->coef + pl2->coef, pl1->expn);pl1 = pl1->next;pl2 = pl2->next;}}while (pl1){InsertPolynList(plh3, pl1->coef, pl1->expn);pl1 = pl1->next;}while (pl2){InsertPolynList(plh3, pl2->coef, pl2->expn);pl2 = pl2->next;}return plh3;
}

单链表实现一元多项式相加相关推荐

  1. c语言单链表实现一元多项式相加算法

    给定两个一元多项式,实现两个一元多项式的相加算法.提示:用一条单链表表示一个一元多项式,每个节点包含三个域:指数域.系数域和后继结点链. 可直接运行 #include <stdio.h> ...

  2. 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序

    题目介绍 来源:腾讯笔试                         难度系数:★★★☆☆                  考察频率:★★★★☆ 题目描述: 给定一个带头结点的单链表,请将其逆序 ...

  3. 单链表存储一元多项式[IMUT 数据结构实验]

    题目 [问题描述] 利用单链表存储一元多项式. [基本要求] 实现以下基本操作: (1)从键盘输入一元多项式的信息,建立一元多项式. (2)实现两个一元多项式相加,并输出和多项式. 分析 题目说是用单 ...

  4. java 单链表一元多项式_java单链表实现一元多项式加法和乘法运算

    设有一个一元多项式  f(x)=∑aixi  ,我们要用一个单链表将它表示出来,并实现它的加和乘运算.多项式的每一项放在一个结点中,每个结点中放两个信息,即每一项的系数和幂.在这里我们用有头结点的链表 ...

  5. 数据结构——有序链表的合并,链表实现一元多项式相加

    1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...

  6. 力扣刷题-单链表两数相加

    分区:链表 2.两数相加 题目描述: 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表 ...

  7. 严蔚敏数据结构:链表实现一元多项式相加

    一.基本概念 1.多项式pn(x)可表示成:  pn(x)=a0+a1x+a2x2+-+anxn. listP={(a0,e0),(a1,e1),(a2,e2),-,(an,en) }.在这种线性表描 ...

  8. 数据结构(Java):用单链表实现多项式相加

    要求: 1.已知有两个多项式Pn(x)和Qm(x),并且在Pn(x)和Qm(x)中指数相差很多,设计算法,求Pn(x)+Qm(x) 2.进行加法运算时不重新开辟存储空间. //定义节点类 class ...

  9. c语言一元多项式相加

    用单链表实现一元多项式相加 #include<stdio.h> #include<stdlib.h> typedef struct Node{float coef;//系数 i ...

最新文章

  1. JDE函数--GetUDC(B函数)
  2. 从程序员的角度深入理解MySQL
  3. php调用restful接口_jzq_sdk_php
  4. [转]SQL2005后的ROW_NUMBER()函数的应用
  5. 给你的站点添加 DNS CAA 保护
  6. 读《自己动手写操作系统》(于渊著)第一节
  7. Navicat安装教程
  8. 一键安装包php.ini,laravel 在windows中使用一键安装包步骤
  9. eclipse运行代码后变为红色和绿色
  10. 第二课: 雷电模拟器的多开和打开
  11. 利用Python实现人脸识别,制作天网系统
  12. 爱因斯坦是人类历史上最伟大的科学家吗?
  13. 华为云空间联系人是不是机主_联系人丢失找回—华为云空间数据安全功能关键时刻出绝招...
  14. 计算机怎么样保存文件,电脑怎样保存表格文件
  15. Symbian OS s60 3rd编程中实现IMSI、IMEI查询
  16. 特征值特征向量和奇异值分解精彩片段汇总
  17. SpringCloud Admin监控界面解释
  18. 你想跨互联网远程调试Android设备吗,推荐一个远程控制手机的免费软件
  19. java 线程管理_Java提供的线程池来创建多线程,进一步优化线程管理。
  20. 公众号 接入微信支付

热门文章

  1. NeurIPS论文解读|Decision Transformer: 通过序列建模解决离线强化学习问题
  2. Python-Django毕业设计租房管理信息系统(程序+Lw)
  3. 乐优商场开发第五天笔记
  4. 组合数学——Nim取子游戏 太有趣了
  5. android studio JSON Viewer
  6. vue-router导航守卫
  7. 【Android底层学习总结】1. 驱动开发基础
  8. 锁机制:读者写者问题 Linux C
  9. mysql 分页面试题_MySQL常见面试题
  10. 《一种摄影创作理念》