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 相关文章推荐
php中全局变量global的使用演示代码
May 18 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
linux下安装php的memcached客户端
Aug 03 PHP
php获取根域名方法汇总
Oct 28 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php实现上传图片文件代码
Jul 19 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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个人网站架设连环讲(三)
2006/10/09 PHP
PHP导入Excel到MySQL的方法
2011/04/23 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
jquery中radio checked问题
2015/03/16 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
node中的session的具体使用
2018/09/14 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
入党自我鉴定
2014/03/25 职场文书
解除劳动合同协议书
2014/04/14 职场文书
岗位明星事迹材料
2014/05/18 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
教师考核鉴定意见
2015/06/05 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python