算法与数据结构(PHP版)
本专栏通过介绍一些经典及常见的算法和数据结构,并以PHP语言将其实现。
qw_xingzhe
身后是家园,眼前尽是世界!
展开
-
常见数据结构PHP实现
单向链表双向链表栈和队列树图原创 2018-06-03 12:59:10 · 4607 阅读 · 0 评论 -
[经典算法][PHP实现集锦]
本文参照 [经典排序算法][集锦] 及相关文章,使用PHP语言重新实现了一遍。相关原理及图解如文中缺少,可到访问参考文章中查看。相关实现及说明难免有不足之处,欢迎指教。经典排序算法 - 冒泡排序 Bubble sort经典排序算法 - 插入排序Insertion sort经典排序算法 - 选择排序Selection sort经典排序算法 - 快速排序Quick sort经典排序算法 - 希尔排序S...原创 2018-05-31 18:10:36 · 599 阅读 · 0 评论 -
使用栈完成高级计算器
1.堆栈的概念一个先入后出(FILO-First In Last Oot)的有序列表。堆栈(stack)的限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,成为(Top),另一端为固定的一端,称为栈底(Bottom)。根据堆栈的定义而知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素(或者取元素)刚好相反,最后放入的元素最先删除,最...原创 2018-06-03 20:28:19 · 1106 阅读 · 0 评论 -
PHP解汉诺塔
问题描述:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。解决思路:(1)以C盘为中介...原创 2018-06-04 11:49:18 · 962 阅读 · 0 评论 -
用PHP实现单向链表结构
链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起。而单向链表就是:每个节点包含了当前节点的值和下一个节点引用。双向链表就是每个节点包含了当前节点的值和上下两个节点的引用。相对于数组结构,链表的增删效率会更加高。单向链表(示意图):PHP代码实现/** * 链表结构 */class Hero{ public $no; public $name; public $nex...原创 2018-06-03 15:45:35 · 2372 阅读 · 0 评论 -
使用环形链表与约瑟夫问题
约瑟夫问题:Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。并求出最后出列的人是哪个?参考:https://blog.csdn.net/wenximalong/article/details/829...原创 2018-06-03 16:04:54 · 709 阅读 · 0 评论 -
经典排序算法 - 冒泡排序 Bubble sort
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换。这样一趟过去后,最大或最小的数字被交换到了最后一位。然后再从头开始进行两两比较交换,直到倒数第二位时结束。PHP代码实现参考:function bubble_sort($arr){ $count = count($arr); for( $i=0;$i<$count;$i++){ // 外层控制趟数 for (...原创 2018-05-29 23:51:15 · 396 阅读 · 0 评论 -
经典排序算法 - 选择排序Selection sort
这种算法相对于冒泡排序而言,是找到了每趟循环中最适合的那位数的位置才选择与它进行交换。其优势是减少了不必要的交换操作,故性能更优。PHP代码实现参考:参考:http://www.cnblogs.com/kkun/archive/2011/11/23/selection_sort.html...原创 2018-05-30 00:53:49 · 297 阅读 · 0 评论 -
经典排序算法 - 插入排序Insertion sort
插入排序的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。常见的插入排序有插入排序(Insertion Sort),希尔排序(Shell Sort),二叉查找树排序(Tree Sort),图书馆排序(Library Sort),Patience排序(Patience Sort)。(一)直接插入排序直接插入排序(Insertion ...原创 2018-05-30 09:50:02 · 463 阅读 · 0 评论 -
经典排序算法 - 快速排序Quick sort
原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列举个例子如无序数组[6 2 4 1 5 9]a),先把第一项[6]取出来,用[6]依次与其余项进行比较,如果比[6]小就放[6]前边,2 4 1 5都比[6]小,所以全部放到[6]前边如果比[6]...原创 2018-05-30 13:01:17 · 346 阅读 · 0 评论 -
经典排序算法 - 希尔排序Shell sort
参考:http://www.cnblogs.com/huangxincheng/archive/2011/11/20/2255695.html原创 2018-05-31 11:06:05 · 490 阅读 · 0 评论 -
经典排序算法 - 归并排序Merge sort
归并排序的原理是把原始数组分成若干子数组(两两分组),对每一个子数组进行排序,继续把子数组与子数组合并(方法:从两子数组头各取一值,小者放入新数组尾部,大者保留至下一趟对比,直至这两个子数组值全部取完),合并后仍然有序,直到全部合并完,形成有序的数组。PHP代码实现参考:/** * 归并排序 * 原理:把原始数组分成若干子数组(向下递归到2个或1个元素一组),对每一个子数组进行排序, * ...原创 2018-05-31 17:32:16 · 474 阅读 · 0 评论