php数据结构之顺序链表与链式线性表示例


Posted in PHP onJanuary 22, 2018

本文实例讲述了php数据结构之顺序链表与链式线性表。分享给大家供大家参考,具体如下:

链表操作

1、     InitList(L):初始化链表
2、     DestroyList(L):删除连接
3、     ClearList(L):清空链表
4、     ListEmpty(L):判断是否为空
5、     ListLength(L):链表长度
6、     getElem(L,i):取出元素
7、     LocateElem(L,e):判断e是否在链表中
8、     PriorElem(L,i):前驱
9、     NextElem(L,i):后继
10、   ListInsert(L,i,e):插入元素
11、   ListDelete(L,i,):删除元素

顺序链表操作

<?php
class ArrayList{
  private $list;
  private $size;
  //构造函数
  public function __construct(){
   $this->list=array();
   $this->size=0;
  }
  public function initList(){
   $this->list=array();
   $this->size=0;
  }
  //删除链表
  public function destoryList(){
   if(isset($this->list)){
     unset($this->list);
    $this->size=0;
   }
  }
  //清空链表
  public function clearList(){
   if(isset($this->list)){
    unset($this->list);
   }
   $this->list=array();
   $this->size=0;
  }
  //判断链表是否为空
  public function emptyList(){
   if(isset($this->list)){
     if($this->size=0)
      return TRUE;
    else
     return FALSE;
   }
  }
  //链表长度
  public function lenghtList(){
   if(isset($this->list)){
    return $this->size;
   }
  }
  //取元素
  public function getElem($i){
   if($i<1||$i>$this->size){
    echo "溢出<br>";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    return $this->list[$i-1];
   }
  }
  //是否在链表中
  public function locateElem($e){
   if(isset($this->list)&&is_array($this->list)){
    for($i=0;$i<$this->size;$i++){
      if($this->list[$i]==$e){
       return $i+1;
      }
    }
    return 0;
   }
  }
  //前驱
  public function priorElem($i){
   if($i<1||$i>$this->size){
    echo "溢出";
    exit();
   }
   if($i==1){
    echo "没有前驱";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    return $this->list[$i-2];
   }
  }
  //后继
  public function nextElem($i){
   if($i<1||$i>$this->size){
    echo "溢出";
    exit();
   }
   if($i==$this->size){
    echo "没有后继";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    return $this->list[$i];
   }
  }
  //插入元素
  public function insertList($i,$e){
   if($i<1||$i>$this->size+1){
    echo "插入元素位置有误";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    if($this->size==0){
      $this->list[$this->size]=$e;
      $this->size++;
    }else{
      $this->size++;
      for($j=$this->size-1;$j>=$i;$j--){
       $this->list[$j]=$this->list[$j-1];
      }
      $this->list[$i-1]=$e;
    }
   }
  }
  //删除元素
  public function deleteLlist($i){
   if($i<1||$i>$this->size){
    echo "删除元素位置有误";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    if($i==$this->size){
      unset($this->list[$this->size-1]);
    }else{
      for($j=$i;$j<$this->size;$j++){
       $this->list[$j-1]=$this->list[$j];
      }
      unset($this->list[$this->size-1]);
     }
   $this->size--;
   }
  }
  //遍历
  public function printList(){
   if(isset($this->list)&&is_array($this->list)){
    foreach ($this->list as $value){
      echo $value." ";
    }
    echo "<br>";
   }
  }
}
?>

链式线性表

<?php
class LinkList {
  private $head;
  private $size;
  private $list;
  public function __construct(){
   $this->head="";
   $this->size=0;
   $this->list=array();
  }
  public function initList(){
   $this->head="";
   $this->size=0;
   $this->list=array();
  }
  //删除链表
  public function destoryList(){
   if(isset($this->list)&&isset($this->head)){
    unset($this->list);
    unset($this->head);
   }
  }
  //清空链表
  public function clearList(){
   if(isset($this->list)){
    unset($this->list);
   }
   $this->list=array();
   $this->size=0;
   $this->head="";
  }
  //判断链表是否为空
  public function emptyList(){
   if(isset($this->list)){
    if($this->size==0)
      returnTRUE;
    else
      returnFALSE;
   }
  }
  //链表长度
  public function lenghtList(){
   if(isset($this->list)){
    return$this->size;
   }
  }
  //取元素
  public function getElem($i){
   if($i<1||$i>$this->size){
    echo "溢出<br>";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    $j=1;
    //头指针
    $tmp=$this->head;
    while($i>$j){
      if($this->list[$tmp]['next']!=null){
       $tmp=$this->list[$tmp]['next'];
       $j++;
      }
    }
    return  $this->list[$tmp]['data'];
   }
  }
  //是否在链表中
  public function locateElem($e){
   if(isset($this->list)&&is_array($this->list)){
    $tmp=$this->head;
    while($this->list[$tmp]['data']!=$e){
      if($this->list[$tmp]['next']!=null){
       $tmp=$this->list[$tmp]['next'];
      }else{
       returnFALSE;
      }
    }
    return TRUE;
   }
  }
  //前驱
  public function priorElem($i){
   if($i<1||$i>=$this->size){
    echo "溢出";
    exit();
   }
   if($i==1){
    echo "没有前驱";
    exit();
   }
   $tmp=$this->head;
   $j=1;
   while($i>$j+1){
    if($this->list[$tmp]['next']!=null){
      $j++;
      $tmp=$this->list[$tmp]['next'];
    }
   }
   return$this->list[$tmp]['data'];
  }
  //后继
  public function nextElem($i){
   if($i<1||$i>$this->size){
    echo "溢出";
    exit();
   }
   if($i==$this->size){
    echo "没有后继";
    exit();
   }
   $j=1;
   $tmp=$this->head;
   while($i>=$j){
    if($this->list[$tmp]['next']!=null){
      $j++;
      $tmp=$this->list[$tmp]['next'];
    }
   }
   return$this->list[$tmp]['data'];
  }
  //插入元素:后插法
  public function insertList($i,$e){
   if(isset($this->list)&&is_array($this->list)){
    //空表
    if($this->size==0){
      $this->head=$this->uuid();
      $this->list[$this->head]['data']=$e;
      $this->list[$this->head]['next']=NULL;
      $this->size++;
    }else{
      if($i<1||$i>$this->size){
      echo"插入元素位置有误";
      exit();
      }
      $j=1;
      $tmp=$this->head;
      while($i>$j){
       if($this->list[$tmp]['next']!=null){
         $j++;
         $tmp=$this->list[$tmp]['next'];
       }
      }
      $find=$tmp;
      $id=$this->uuid();
      if($this->list[$find]['next']==null){
       //尾部
       $this->list[$find]['next']=$id;
       $this->list[$id]['data']=$e;
       $this->list[$id]['next']=null;
       $this->size++;
      }else{
       //中间
       $this->list[$id]['next']=$this->list[$find]['next'];
       $this->list[$find]['next']=$id;
       $this->list[$id]['data']=$e;
       $this->size++;
      }
    }
   }
  }
  //删除元素
  public function deleteLlist($i){
   if($i<1||$i>$this->size){
    echo "删除元素位置有误";
    exit();
   }
   if(isset($this->list)&&is_array($this->list)){
    if($i==1){
      //删除头元素
      $this->head=$this->list[$this->head]['next'];
    }else{
      $tmp=$this->head;
      $j=1;
      while($i>$j+1){
       if($this->list[$tmp]['next']!=null){
         $j++;
         $tmp=$this->list[$tmp]['next'];
       }
      }
      //找到删除元素的前驱
      $find=$tmp;
      //删除的元素
      if($this->list[$find]['next']!=null){
       //不是最后一个元素
       $delete=$this->list[$find]['next'];
       $this->list[$find]['next']=$this->list[$delete]['next'];
      }else{
       $this->list[$tmp]['next']=null;
      }
    }
   }
  }
  public function traverstList(){
   $tmp=$this->head;
   while($this->list[$tmp]['next']!=NULL){
    $this->printList($this->list[$tmp]['data'],TRUE);
    $tmp=$this->list[$tmp]['next'];
   }
   $this->printList($this->list[$tmp]['data'],FALSE);
  }
  public function printList($str,$flag){
   if($flag){
    echo$str."->";
   }else {
    echo$str."<br>";
   }
  }
  //uuid 唯一码
  public  function uuid($prefix = '') {
  $chars =md5(uniqid(mt_rand(), true));
  $uuid = substr($chars,0,8) . '-';
  $uuid .=substr($chars,8,4) . '-';
  $uuid .=substr($chars,12,4) . '-';
  $uuid .=substr($chars,16,4) . '-';
  $uuid .= substr($chars,20,12);
  return $prefix. $uuid;
  }
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
apache mysql php 源码编译使用方法
May 03 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
php常用正则函数实例小结
Dec 29 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 PHP
通过源码解析Laravel的依赖注入
Jan 22 #PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 #PHP
php语言注释,单行注释和多行注释
Jan 21 #PHP
PHP注释语法规范与命名规范详解篇
Jan 21 #PHP
php nginx 实时输出的简单实现方法
Jan 21 #PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 #PHP
PHP Class SoapClient not found解决方法
Jan 20 #PHP
You might like
PHP中常用的转义函数
2014/02/28 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
安装docker-compose的两种最简方法
2019/07/30 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
计算机求职信
2013/12/01 职场文书
化学教师教学反思
2014/01/17 职场文书
中学教师请假制度
2014/02/03 职场文书
奖学金个人总结
2015/03/04 职场文书