数据结构:
双向链表
双链表 (DLL) 是一个链接到两个方向的节点列表。当底层结构是 DLL 时, 迭代器的操作、对两端的访问、节点的添加或删除都具有 O (1) 的开销。因此, 它为栈和队列提供了一个合适的实现。
堆
堆是遵循堆属性的树状结构: 每个节点都大于或等于其子级, 使用对堆全局的已实现的比较方法进行比较。
数组
数组是以连续方式存储数据的结构, 可通过索引进行访问。不要将它们与 php 数组混淆: php 数组实际上是按照有序的列表实现的。
映射
映射是一个数据拥有键值对。PHP 数组可以被看作是从整数/字符串到值的映射。SPL 提供了从对象到数据的映射。此映射也可用作对象集。
基本的算法:冒泡排序,快速排序,二分查找,顺序查找(需要能够手写)
下文摘自:http://www.jb51.net/article/89047.htm
冒泡排序:
<?php
function
mysort(
$arr
)
{
for
(
$i
= 0;
$i
<
count
(
$arr
);
$i
++)
{
$isSort
= false;
for
(
$j
=0;
$j
<
count
(
$arr
) -
$i
- 1;
$j
++)
{
if
(
$arr
[
$j
] <
$arr
[
$j
+1])
{
$isSort
= true;
$temp
=
$arr
[
$j
];
$arr
[
$j
] =
$arr
[
$j
+1];
$arr
[
$j
+1] =
$temp
;
}
}
if
(
$isSort
)
{
break
;
}
}
return
$arr
;
}
$arr
=
array
(3,1,2);
var_dump(mysort(
$arr
));
?>
快速排序:
<?php
//快速排序
function
quick_sort(
$arr
)
{
//先判断是否需要继续进行
$length
=
count
(
$arr
);
if
(
$length
<= 1)
{
return
$arr
;
}
$base_num
=
$arr
[0];
//选择一个标尺 选择第一个元素
//初始化两个数组
$left_array
=
array
();
//小于标尺的
$right_array
=
array
();
//大于标尺的
for
(
$i
=1;
$i
<
$length
;
$i
++)
{
//遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
if
(
$base_num
>
$arr
[
$i
])
{
//放入左边数组
$left_array
[] =
$arr
[
$i
];
}
else
{
//放入右边
$right_array
[] =
$arr
[
$i
];
}
}
//再分别对 左边 和 右边的数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left_array
= quick_sort(
$left_array
);
$right_array
= quick_sort(
$right_array
);
//合并左边 标尺 右边
return
array_merge
(
$left_array
,
array
(
$base_num
),
$right_array
);
}
$arr
=
array
(3,1,2);
var_dump(quick_sort(
$arr
));
?>
二分查找:
<?php
//二分查找
function
bin_search(
$arr
,
$low
,
$high
,
$k
)
{
if
(
$low
<=
$high
)
{
$mid
=
intval
((
$low
+
$high
)/2);
if
(
$arr
[
$mid
] ==
$k
)
{
return
$mid
;
}
else
if
(
$k
<
$arr
[
$mid
])
{
return
bin_search(
$arr
,
$low
,
$mid
-1,
$k
);
}
else
{
return
bin_search(
$arr
,
$mid
+1,
$high
,
$k
);
}
}
return
-1;
}
$arr
=
array
(1,2,3,4,5,6,7,8,9,10);
print
(bin_search(
$arr
,0,9,3));
?>
顺序查找:
<?php
//顺序查找
function
seq_search(
$arr
,
$n
,
$k
)
{
$array
[
$n
] =
$k
;
for
(
$i
= 0;
$i
<
$n
;
$i
++)
{
if
(
$arr
[
$i
] ==
$k
)
{
break
;
}
}
if
(
$i
<
$n
)
{
return
$i
;
}
else
{
return
-1;
}
}
?>