<?php
/**
*一元多项式的表示和相加
*一元多项式的表示采用单链表的形式
**/
header("content-type:text/html;charset=gb2312");
//该类可以在--PHP数据结构之三 线性表中的单链表的PHP实现--找到
include_once("./SingleLinkedList.class.php");
/**
*一元多项式的相加实现算法:直接相加
*@param SingleLinkedList $a 第一个多项式
*@param SingleLinkedList $b 第二个多项式
*@param SingleLinkedList $c 相加后的多项式
*@return void
**/
function polynomialaddition(&$a,&$b,&$c){
if(!$a->getIsEmpty() && !$b->getIsEmpty()){
$pa=$a->mNext;
$pb=$b->mNext;
while($pa!=null && $pb!=null){
if($pa->mElem['expn'] < $pb->mElem['expn']){
$c->getInsertElem($c->getLength(),$pa->mElem);
$pc=$pa;
$pa=$pa->mNext;
}
if($pa->mElem['expn'] > $pb->mElem['expn']){
$c->getInertElem($c->getLength(),$pb->mElem);
$pc=$pb;
$pb=$pb->mNext;
}
if($pa->mElem['expn'] == $pa->mElem['expn']){
$ccoef=$pa->mElem['coef']+$pb->mElem['coef'];
if(abs($ccoef) < 1.0E-10){
$pa=$pa->mNext;
$pb=$pb->mNext;
}else{
$pa->mElem['coef']=$ccoef;
$c->getInsertElem($c->getLength(),$pa->mElem);
$pa=$pa->mNext;
$pb=$pb->mNext;
}
}
}
if($pa==null){
while($pb!=null){
$c->getInsertElem($c->getLength(),$pb->mElem);
$pb=$pb->mNext;
}
}elseif($pb==null){
while($pa!=null){
$c->getInsertElem($c->getLength(),$pa->mElem);
$pa=$pa->mNext;
}
}
}
}
//coef表示系数
//expn表示指数
$adata=array(
array('coef'=>5,
'expn'=>0,
),
array('coef'=>2,
'expn'=>1,
),
array('coef'=>4,
'expn'=>2,
),
array('coef'=>13,
'expn'=>3,
),
array('coef'=>160,
'expn'=>4,
),
array('coef'=>12,
'expn'=>5
),
array('coef'=>23,
'expn'=>6,
),
array('coef'=>34,
'expn'=>7,
),
array('coef'=>22,
'expn'=>8,
),
);
$bdata=array(
array('coef'=>16,
'expn'=>0,
),
array('coef'=>9,
'expn'=>2,
),
array('coef'=>17,
'expn'=>4,
),
array('coef'=>-12,
'expn'=>5,
),
);
$a=new SingleLinkedList();
$b=new SingleLinkedList();
$c=new SingleLinkedList();
$a->getTailCreateSLL($adata);
$b->getTailCreateSLL($bdata);
polynomialaddition($a,$b,$c);
echo "\$a多项式的数据为:<pre>";
var_dump($a->getAllElem());
echo "</pre>";
echo "\$b多项式的数据为:<pre>";
var_dump($b->getAllElem());
echo "</pre>";
echo "一元多项式相加结果:<pre>";
var_dump($c->getAllElem());
echo "</pre>";
?>

PHP数据结构之四 一元多项式的相加PHP单链实现的更多相关文章

  1. 关于使用静态链表实现一元多项式的相加&&乘积

    一元多项式的相加类似于两条链表的合并 当然前提是链表中的幂指数是按顺序排列的 此题中的链表采用的是升序排列,输出也是按升序输出的 #include<stdio.h> #include< ...

  2. 数据结构 C++ 单链表 一元多项式的相加

    #include <iostream> using namespace std; struct Node { double coe; //系数 int exp; //指数 Node *ne ...

  3. 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

    数学中一元n次多项式可表示成如下的形式:  Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她)      (1)请设计一套接口用以表示和操 ...

  4. Python数据结构之四——set(集合)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...

  5. php—Spl库常用数据结构基本用法

    数据结构之一 : 栈 //zhan $stack = new SplStack(); $stack->push('data1'); $stack->push('data2'); echo ...

  6. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  7. Python编程核心内容之一——Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四--set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  8. Python编程核心内容 ---- Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四——set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  9. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

随机推荐

  1. L129

    Iraq Sees Spike in Water-Borne IllnessesIraqi health officials say that a health crisis stemming fro ...

  2. c++指针初探

    业余时间准备重温一下c++,因为在阅读Android源码到native层的时候感觉有点吃力,只是在大学时候很不用心的学过c++,所以重温下以便打好一些编程基础知识,本篇就很简单的对c++的指针做初步的 ...

  3. 从零开始编写深度学习库(五)Eigen Tensor学习笔记2.0

    1.extract_image_patches函数的使用: 假设Eigen::Tensor形状为(3,8,8,9),现在要对第二维.第三维根据size大小为(2,2),stride=(2,2),那么如 ...

  4. Epoll 实例

    服务端调试: [test@cs2 epoll]$ g++ epoll_server.cpp -o epoll_server -lpthread [test@cs2 epoll]$ ./epoll_se ...

  5. python 中出现 “IndentationError: expected an indented block” 问题

    python 学习 在定义Python函数的时候如下 >>>def hello() . . .print "hello" 这样会报错的,报错如下: Indenta ...

  6. Java进阶知识点6:并发容器背后的设计理念 - 锁分段、写时复制和弱一致性

    一.背景 容器是Java编程中使用频率很高的组件,但Java默认提供的基本容器(ArrayList,HashMap等)均不是线程安全的.当容器和多线程并发编程相遇时,程序员又该何去何从呢? 通常有两种 ...

  7. Linux 下安装composer

    1.下载composer.phar文件. 2.将composer.phar文件上传linux. 3.执行 php composer.phar 4.全局安装:mv composer.phar /usr/ ...

  8. struts1和struts2原理解析

    1.struts1和struts2 是2个完全不同的框架 其实struts2核心就是 webwork框架 struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截 ...

  9. Java 开发手册之编程规约

    一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / n ...

  10. mysql5.6.11安装

    下面详细介绍5.6版本MySQL的下载.安装及配置过程. 图1.1 MySQL5.6 目前针对不同用户,MySQL提供了2个不同的版本: Ø         MySQL Community Serve ...