数据结构最简单就是链表,
基本解释
形如f(x)=anxn + an-1xn-1 …+a2x2+a1x+a0的函数,叫做多项式函数,也称n次多项式函数、n次函数。
显然,当n=1时,其为一次函数y=kx+b,当n=2时,其为二次函数。
其中其中an≠0,n∈N+
关键数据:
- 多项式的关键数据
- 多项式项数n
- 各项系数ai及指数i。
如何用程序来表示,并执行相应操作
- 顺序存储结构直接表示,即简单索引数组表示
项xi的系数ai用如下代码表示
$a =array();
$a[$i];
例: f(x) = 4x5-3x2+1中,各项存储为:
//索引为下标
$a =array();
$a=[
0=>1, //表示x^0的系数为1
1=>0, //表示x的系数为0,题目中没有x项,故为0
2=>-3 //表示x^2的系数为-x,及表示-3x^2
4=>0,
5=>4,
//....
]
缺点: x+3x2000 表示,必须用数组大小为2001以上表示,多余0浪费空间和时间。
- 顺序存储结构表示非零项
分析: 每个非0项aixi涉及两个信息: 系数ai和指数i;因此,可以将一个多项式看成一个(ai,i)的二元组集合。C中用结构数组表示,PHP可以用二维数据。
例:
P1(x) = 9x12 +15x8 + 3x2 和
P2(x) = 26x19 -4x8 -13x6 + 82
//p1:
$a1= [
[9,12], //表示第0项,系数为9.指数为12,即9x^12
[15,8], //第1项,系数14,指数为8,即15x^8
[3,2]
];
//p2
$a2 = [
[26,19],
[-4,8],
[-13,6],
[82,0] //第3项,系数为82,指数为0,即82x^0,也就是常数82
];
为方便计算,需要按指数大小有序存储,过程如下
上面两个相加,即P3=P1+P2,求P3
相加过程:从头开始,比较两个多项式当前对应项的指数。
基本计算逻辑,指数从大到小排出,若相同,则相加,过程如下:
P1:(9,12),(15,8),(3,2)
P2:(26,19),(-13,6),(82,0)
P3:(26,19),(9,12),(11,8),(-13,6),(3,2),(82,0)
P3(x) = 26x19 +9x12 +11x8-13x6 +3x2 +82
- 链表结构存储非0项
列表中每个节点存储多项式中的一个非0项,包括系数和指数俩个数据域,以及一个指针域。C语言通过truct实现,php可以定义一个节点类来存储节点数据与节点指针
指数 | 系数 | 指针域 |
---|---|---|
coef | expon | link |
php代码实现
//节点类
class Node{
public $coef; //项系数
public $expon; //指数
public $next;
public function __construct($coef,$expon,$next=null){
$this->coef = $coef;
$this->expon = $expon;
$this->next = $next; //指针
}
}
线性表
- 同一个问题可以有不同表示方法
- 有一类共性问题:有序线性的组织和管理
“线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构
- 表中元素个数称为线性表长度
- 线性表没有元素时,称为空表
- 表起始位置称表头,表示结束位置称表尾
利用数组的连续存储空间顺序存放线性表的各元素
//链表类
class LinkList{
public $head; //头结点
public $size; //长度
public function __construct()
{
$this->head = new Node();
$this->size = 0;
}
/**
* @param $index 添加索引位置
* @param $coef
* @param $expon
* @throws Exception
*/
public function add($index,$coef,$expon){
if ($index>$this->size){
throw new Exception("超出链表长度");
}
$prev = $this->head; //默认是第一个节点
for ($i =0;$i<$index;$i++)
{
$prev = $prev->next;
}
$prev->next = new Node($coef,$expon,$prev->next);
$this->size++;
}
}
下一篇: PHPer学数据结构与算法(二)-- 链表-线性表操作与PHP代码实现
https://www.cnblogs.com/qixingzhi/p/11169739.html
PHP实现链表 https://www.cnblogs.com/tongcharge/p/12106480.html