数据结构与算法

xiaoxiao2021-02-28  53

数据结构:

双向链表

双链表 (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;      }    } ?>
转载请注明原文地址: https://www.6miu.com/read-2620473.html

最新回复(0)