<?php
/**** 1. 类LNode用作创建单链表时,生成新的节点。* 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表)* 3. CreateListHead: 具有$num个数据元素的单链表的创建——头插法* 4. CreateListTail: 具有$num个数据元素的单链表的创建——尾插法* 5. DestroyList: 销毁单链表* 6. ClearList:清空单链表* 7. ListEmpty:判断单链表是否为空* 8. ListLength:返回单链表数据元素的个数* 9. GetElem:返回单链表中指定位置的数据元素* 10. LocateElem:查找指定元素在单链表中的位序* 11. PriorElem:获取指定元素的前面一个元素* 12. NextElem:获取指定元素的后面一个元素* 13. ListInsert:在指定位置之前插入一个数据元素* 14. ListDelete: 删除指定位置的数据元素* 15. ListTraverse: 遍历单链表的所有数据元素**/class LNode{public $data;public $next;public function __construct($data=null){$this->data=$data;$this->next=null;}
}class SingleLinkList{public $data;public $next;public function __construct(){$this->data=null;$this->next=null;}//具有$num个数据元素的单链表的创建——头插法public function CreateListHead($num){for($i=0;$i<$num;$i++){$node=new LNode();$node->data=mt_rand(100,200);$node->next=$this->next;$this->next=$node;}}//具有$num个数据元素的单链表的创建——尾插法public function CreateListTail($num){$tail=$this;for($i=0;$i<$num;$i++){$node=new LNode();$node->data=mt_rand(100,200);$tail->next=$node;$tail=$node;}$node->next=null;}//销毁单链表public function DestroyList(){//$this相当于头指针,它指向的是头结点,$this->next相当于第一个结点//之所以需要将$this赋值给$that,是因为$this无法用作变量进行赋值$that=$this;while($that){$node=$that->next;unset($that);$that=$node;}}//将单链表清空public function ClearList(){$p=$this->next;while($p){$node=$p->next;unset($node);$p=$node;}$this->next=null;}//判断单链表是否为空public function ListEmpty(){if($this->next){return false;}else{return true;}}//返回单链表中数据元素的个数public function ListLength(){$count=0;//初始化变量$p=$this->next;while($p){$count++;$p=$p->next;}return $count;}//返回指定位置的数据元素public function GetElem($pos){$count=1;$p=$this->next;while($p && $count<$pos){$count++;$p=$p->next;}if(!$p || $pos<$count){return 'ERROR';}return $p->data;}//    或者public function GetElem2($pos){$count=0;$p=$this->next;while($p){$count++;if($count==$pos){return $p->data;}$p=$p->next;}return 'ERROR';}//查找指定元素在单链表中的位序public function LocateElem($elem){$count=0;$p=$this->next;while($p){$count++;if($p->data==$elem){return $count;}}return 'ERROR';}//获取指定元素的前面一个元素public function PriorElem($elem){$p=$this->next;if($p && $p->data=$elem){return $p->data.'已经是第一个元素,已无前驱元素';}while($p && $p->next){$q=$p->next;if($q->data==$elem){return $p->data;}$p=$q;}return 'ERROR';}//获取指定元素的后面一个元素public function NextElem($elem){$p=$this->next;while($p && $p->next){if($p->data==$elem){return $p->next->data;}$p=$p->next;}if($p && $p->next==null){return $p->data.'已经是最后一个元素,已无后继元素';}return 'ERROR';}//在指定位置之前插入一个节点元素public function ListInsert($pos,$node){$p=$this;$count=0;while($p) {$count++;if ($count == $pos) {$node->next = $p->next;$p->next = $node;return 'OK';}$p=$p->next;}return 'ERROR';}//或者 这种效率会高一些public function ListInsert2($pos,$node){$p=$this;$count=1;while($p && $count<$pos){$count++;$p=$p->next;}if(!$p || $count>$pos){return 'ERROR';}$node->next=$p->next;$p->next=$node;return 'OK';}//删除单链表指定位置的数据元素public function ListDelete($pos){$count=1;$p=$this;while($p && $count<$pos){$count++;$p=$p->next;}if(!$p || $count>$pos){return 'ERROR';}$q=$p->next;$p->next=$q->next;unset($q);return 'OK';}
//    或者public function ListDelete2($pos){$count=0;$p=$this;//此处之所以使用$p->next,而不是$p作为判断条件是因为这样可以在链表为空的时候,少一次无谓的循环。while($p->next){$count++;if($count==$pos){$q=$p->next;$p->next=$q->next;unset($q);return 'OK';}$p=$p->next;}return 'ERROR';}//单链表的遍历public function ListTraverse(){$arr=array();$p=$this->next;while($p){$arr[]=$p->data;$p=$p->next;}return $arr;}
}

转载于:https://blog.51cto.com/noican/1598940

数据结构之线性表——链式存储结构之单链表(php代码实现)相关推荐

  1. php数据结构链表代码,数据结构之线性表——链式存储结构之单链表(php代码实现)...

    /** * * 1. 类LNode用作创建单链表时,生成新的节点. * 2. 类SingleLinkList用于创建单链表以及对单链表的一些操作方法(实例化此类就相当于创建了一个空链表) * 3. C ...

  2. 线性表之链式存储结构_单链表相关算法

    在存储结构上,不需要连续的存储空间,需要上一个结点的指针域 指向下一个结点即可,找到一个结点就可以找到下一个结点. 学习教材是大话数据结构,加上自己的一些个人理解.这个算法 有点绕,需要对指针 相关内 ...

  3. 线性表-链式存储结构

    3.6 线性表的链式存储结构 3.6.1 顺序存储结构不足的解决办法 前面我们讲的线性表的顺序存储结构.它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素,这显然就需要耗费时间.能不能想办法解决 ...

  4. 线性表的链式存储结构以及单链表的插入和删除原理实现

    线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...

  5. 数据结构之线性表-链式存储之单链表(一)

    本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述> 1.1 单链表简介 线性表的最大的缺 ...

  6. Python 数据结构 之 串 的链式存储结构

    本文所采用的数据结构模板为 <数据结构教程>C语言版,李春葆.尹为民等著. 改篇所涉及到的是 串 的链式存储结构. 用Python仿照C语言来实现. 文章转载请注明:  Python 数据 ...

  7. 数据结构——线性表之链式存储结构

    单链表: 概念: 1.由于线性表的顺序存储在插入与删除时需要移动大量元素,适用于不经常改变元素的情况,那么当我们需要经常操作元素时该怎么办,这就有了接下来的线性表的链式存储结构 2.单链表在内存的存储 ...

  8. BJFU_数据结构习题_218基于链式存储结构的图书信息表的最贵图书的查找

    欢迎登录北京林业大学OJ系统 http://www.bjfuacm.com 218基于链式存储结构的图书信息表的最贵图书的查找 描述 定义一个包含图书信息(书号.书名.价格)的链表,读入相应的图书数据 ...

  9. BJFU_数据结构习题_219基于链式存储结构的图书信息表的最爱图书的查找

    欢迎登录北京林业大学OJ系统 http://www.bjfuacm.com 219基于链式存储结构的图书信息表的最爱图书的查找 描述 定义一个包含图书信息(书号.书名.价格)的链表,读入相应的图书数据 ...

最新文章

  1. vs2017 open从v_宣布#Open2017,这是面向开发人员的除夕直播流
  2. 2021全国高校计算机能力挑战赛(初赛)Java试题二
  3. 屠榜多目标跟踪!华科amp;港大提出ByteTrack:基于数据关联方法BYTE的跟踪器
  4. 百度开源业内首个口罩人脸检测及分类模型,携手开发者共同抗疫
  5. 用于初始化Xilinx 存储 IP核的COE文件格式
  6. 华为鸿蒙系统源码_鸿蒙系统 IO 栈分析 | 解读鸿蒙源码
  7. 史上最详细Docker安装最新版Minio 带详解 绝对值得收藏!!! 让我们一起学会使用minio搭建属于自己的文件服务器!!走上白嫖之路!解决启动了但是浏览器访问不了的原因
  8. mysql-workbench运行存储过程
  9. ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)
  10. linux未知设备驱动程序,未知Android设备 - linux mint
  11. 常用命令_GIT常用命令大全
  12. 华为手机asph啥机型_2020年最值得买大品牌手机盘点:华为vivo等五款机型入围
  13. 华为虚拟化usb服务器,华为FusionComputer服务器虚拟化完美解决方案
  14. 求两个数的最大公约数和最小公倍数
  15. 2021 知来者之可追
  16. Python(贪心算法)问题 D: 删数问题_输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。
  17. 网上开店平台选择最关键
  18. VulnHub渗透测试实战靶场笔记(持续更新)
  19. c语言编程编写计算器图形,c语言编写的图形计算器.DOC
  20. 常见的几个非关系型数据库(NoSQL)、非关系型和关系型的区别

热门文章

  1. 在线文本行固定长度填充工具
  2. Spring Security Oauth2 认证(获取token/刷新token)流程
  3. 从零开始学 Web 之 JS 高级(二)原型链,原型的继承
  4. halcon算子翻译——compose3
  5. MSSQL日期格式转换函数(使用CONVERT)
  6. Jmeter初探之录制
  7. IDEA开发WebService遇到的问题和SOAPUI工具的使用
  8. JavaScript 简介 1
  9. AppStore ipa (苹果内购)笔记
  10. IOS NSUserDefaults 讲解 用法