源码家族
当前位置:首页 > 资讯中心

资讯中心

【 PHP数据结构之顺序结构线性表 】

发布时间:2021-06-28 11:50:01 阅读次数:160

线性表的要求:存在唯一的“第一个”元素与“最后一个”元素,每个元素最多一个前驱和一个后继。

线性表的顺序结构即数据存储单元是连续的,每个数的下一个数据即为该结构的下一个数。

优点:顺序结构由于其数据是依次排开的,因此在查找数据时很方便,可以直接根据编号定位到数值。同时,要修改某个数值也很快捷,可以直接定为到数值并进行修改。

缺点:由于其是顺序结构,因此要在数据当中插入数据或者删除数据较为复杂,需要改动插入点之后所有数据的位置。

PHP实现顺序结构线性表:

代码实现了数据初始化、增删改查、清空数据的过程。

源代码如下所示:

<?php
//生成一个1,2,3...,n的数据
function generalSeq($n){
$seq = array();
for($i=0;$i<$n;$i++){
          $seq[$i] = $i+1;
          }
          return $seq;
          }//清空数据
          function freeSeq($seq){
          unset($seq);
          return $seq;
          }//查找第i个数据
          function searchSeq($seq, $n){
          $count = count($seq);
          if($count==0||$n<=0||$n>$count){
          return '查询的范围有误';
          }
          else{
          return $seq[$n];
          }
          }//修改第i个数据
          function updateSeq($seq, $n, $n_value){
          $count = count($seq);
          if($count==0||$n<=0||$n>$count){
          return $seq;
          }
          else{
          $seq[$n] = $n_value;
          return $seq;
          }
          }//插入数组i,//假设两个数组均非递减有序,//要求插入后的数组仍非递减有序function addSeq($old_seq, $new_seq){$final_seq = array();$c_old = count($old_seq);$c_new = count($new_seq);$k = 0;$i = 0;$j = 0;//echo $c_new;die();while($i<$c_old&&$j<$c_new){
          if($old_seq[$i]<=$new_seq[$j]){
                    $final_seq[$k]= $old_seq[$i];
                    $k++;
                    $i++;
          }
          else{
                    $final_seq[$k]= $new_seq[$j];
                    $k++;
                    $j++;
          }       }while($i<$c_old){
          $final_seq[$k] =$old_seq[$i];
          $k++;
          $i++;                 
           }while($j<$c_new){
          $final_seq[$k] =$new_seq[$j];
          $k++;
          $j++;                 
           }return $final_seq;}//删除数组第n个元素
           function deleteSeq($seq, $n){
           $c_seq = count($seq);
           $count = count($seq);
           if($count==0||$n<=0||$n>$count){
          return $seq;
          }else{
          for($i=$n-1;$i<$c_seq-1;$i++){
                    $seq[$i] =$seq[$i+1];
          }
          unset($seq[$c_seq-1]);
          return $seq;
          }
          }
          $seq = generalSeq(10);
          echo "<br />new seq:";print_r($seq);
          echo "<br />search result:".searchSeq($seq, 5);
          $new_seq = array(2, 4, 5, 7, 9, 13);
          $seq = addSeq($seq,$new_seq);
          echo "<br />add result:";
          print_r($seq);
          echo "<br />update result:";
          $seq = updateSeq($seq, 3, 33);
          print_r($seq);
          echo "<br />delete result:";
          $seq = deleteSeq($seq,6);
          print_r($seq);
          echo "<br />free result:";
          $seq = freeSeq($seq);print_r($seq);?>


上一篇:Go语言变量的声明使用
下一篇:初始化Go语言变量