php 实现双向链表
/**
* 链表元素结点类
*/
class Node {
public $pre = NULL; // 前驱
public $next = NULL; // 后继
public $data = NULL; // 结点值
public function __Construct($data) {
$this->data = $data;
}
} /**
* 双向链表类
*/
class DoubleLink {
private $head; // 头指针
private $tail; // 尾指针
private $len; // 链表长度 /**
* 初始化链表
*/
public function __Construct()
{
$newNode = $newNode = new Node(null);
$this->tail = $this->head = $newNode;
$this->len = 0;
} /**
* 添加结点
* @param $data 要添加的结点
* @param $search 添加的位置
*/
public function addNode($data, $search = null) {
$newNode = new Node($data);
$tmp = $this->searchNode($search);
if ($tmp !== null) {
$newNode->pre = $tmp->pre;
$newNode->next = $tmp;
$tmp->pre = $newNode;
$newNode->pre->next = $newNode;
} else {
$newNode->pre = $this->tail;
$this->tail->next = $newNode;
$this->tail = $newNode;
}
$this->len++;
} /**
* 删除指定结点
* @param $search
*/
public function delNode($search) {
$tmp = $this->searchNode($search);
if(null !== $tmp){
if ($tmp->next !== null) {
$tmp->pre->next = $tmp->next;
$tmp->next->pre = $tmp->pre;
} else {
$tmp->pre->next = null;
}
unset($tmp);
$this->len--;
}
} /**
* 修改指定结点的值
* @param $search
* @param $data
*/
public function setNode($search, $data){
$tmp = $this->searchNode($search);
if(null !== $tmp){
$tmp->data = $data;
}
} /**
* 查找结点
* @param $search 要查找的结点元素值
* @return $tmp 查找到的结点元素
*/
public function searchNode($search) {
$tmp = $this->head;
while ( $tmp->next !== null ) {
$tmp = $tmp->next;
if ($tmp->data === $search) {
return $tmp;
}
}
return null;
} /**
* 读取链表全部结点
*/
public function show() {
$tmp = $this->head;
while ( $tmp->next !== null ) {
$tmp = $tmp->next;
echo $tmp->data;
}
echo "<br/>";
$tmp = $this->tail;
while ( $tmp->pre !== null ) {
echo $tmp->data;
$tmp = $tmp->pre;
}
}
} $myList = new DoubleLink();
$myList->addNode("A");
$myList->addNode("B");
$myList->addNode("C");
$myList->addNode("D");
$myList->addNode("E");
$myList->addNode('F','C');
$myList->delNode('F');
$myList->setNode("B",'G');
$myList->show();
php 实现双向链表的更多相关文章
- 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- 剑指Offer面试题:25.二叉搜索树与双向链表
一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...
- Linux 内核数据结构:Linux 双向链表
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...
- Linux 内核数据结构:双向链表
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...
- 线性表-双向链表(LinkedList)
双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...
- Shuffling Machine和双向链表
1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...
- MS - 1 - 把二元查找树转变成排序的双向链表
## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10 ...
- javascript中的链表结构—双向链表
1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...
- Java自己实现双向链表LinkList
/** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...
随机推荐
- 小甲鱼Python第六讲课后习题
python中被看作假:FALSE none 0 ‘ ’ " " ( ) [ ] { },其他一切都被解释为真 0.Python 的 floor 除法现在使用“//”实现, ...
- 【LCA&倍增】货物运输 @upcexam5909
时间限制: 1 Sec 内存限制: 128 MB 题目描述 在一片苍茫的大海上,有n座岛屿,岛屿与岛屿之间由桥梁连接,所有的岛屿刚好被桥梁连接成一个树形结构,即共n-1架桥梁,且从任何一座岛屿出发都能 ...
- web端设计和web前端开发 的区别
- @RequestBody, @ResponseBody 注解详解(转)
原文地址: https://www.cnblogs.com/qq78292959/p/3760651.html @RequestBody, @ResponseBody 注解详解(转) 引言: 接上一篇 ...
- 【MAC】Mac下部分常用的小工具
Homebrew: 官方介绍:The missing package manager for OS X(OS X 不可或缺的套件管理器) /usr/bin/ruby -e "$(curl - ...
- DroneCI启用privileged
https://www.aliyun.com/jiaocheng/123155.html?spm=5176.100033.2.5.EIV4p6 drone的服务需要配置DRONE_ADMIN环境变量, ...
- html5使用canvas实现毫秒级画心电图
- 机械臂运动学逆解(Analytical solution)
计算机器人运动学逆解首先要考虑可解性(solvability),即考虑无解.多解等情况.在机器人工作空间外的目标点显然是无解的.对于多解的情况从下面的例子可以看出平面二杆机械臂(两个关节可以360°旋 ...
- go微服务框架go-micro深度学习(四) rpc方法调用过程详解
上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取server的地 ...
- Python内置的urllib模块不支持https协议的解决办法
Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...