PHP小教程之实现双向链表


Posted in PHP onJune 12, 2014

看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下。上一次分享了《PHP小教程之实现链表》,这次来补充说一下双向链表。

<?php
        class Hero
        {
            public $pre=null;
            public $no;
            public $name;
            public $next=null;
            public function __construct($no='',$name='')
            {
                $this->no=$no;
                $this->name=$name;
            }
            static public function addHero($head,$hero)
            {
                $cur = $head;
                $isExist=false;
                //判断目前这个链表是否为空
                if($cur->next==null)
                {
                    $cur->next=$hero;
                    $hero->pre=$cur;
                }
                else
                {
                    //如果不是空节点,则安排名来添加
                    //找到添加的位置
                    while($cur->next!=null)
                    {
                        if($cur->next->no > $hero->no)
                        {
                            break;
                        }
                        else if($cur->next->no == $hero->no)
                        {
                            $isExist=true;
                            echo "<br>不能添加相同的编号";
                        }
                        $cur=$cur->next;
                    }
                    if(!$isExist)
                    {
                        if($cur->next!=null)
                        {
                            $hero->next=$cur->next;
                        }
                        $hero->pre=$cur;
                        if($cur->next!=null)
                        {
                            $hero->next->pre=$hero;
                        }
                        $cur->next=$hero;                    
                    }
                }
            }
            //遍历
            static public function showHero($head)
            {
                $cur=$head;
                while($cur->next!=null)
                {
                    echo "<br>编号:".$cur->next->no."名字:".$cur->next->name;
                    $cur=$cur->next;
                }
            }
            static public function delHero($head,$herono)
            {
                $cur=$head;
                $isFind=false;
                while($cur!=null)
                {
                    if($cur->no==$herono)
                    {
                        $isFind=true;
                        break;
                    }
                    //继续找
                    $cur=$cur->next;
                }
                if($isFind)
                {
                    if($cur->next!=null)
                    {
                        $cur->next_pre=$cur->pre;
                    }
                    $cur->pre->next=$cur->next;
                }
                else
                {
                    echo "<br>没有找到目标";
                }                
            }
        }
        $head = new Hero();
        $hero1 = new Hero(1,'1111');
        $hero3 = new Hero(3,'3333');
        $hero2 = new Hero(2,'2222');
        Hero::addHero($head,$hero1);
        Hero::addHero($head,$hero3);
        Hero::addHero($head,$hero2);
        Hero::showHero($head);
        Hero::delHero($head,2);
        Hero::showHero($head);
?>
PHP 相关文章推荐
Php做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
php使用PDO方法详解
Dec 27 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
php获取远程文件的内容和大小
Nov 03 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 #PHP
PHP命名空间(Namespace)简明教程
Jun 11 #PHP
PHP APC配置文件2套和参数详解
Jun 11 #PHP
PHP捕获Fatal error错误的方法
Jun 11 #PHP
PHP独立Session数据库存储操作类分享
Jun 11 #PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 #PHP
php+ajax导入大数据时产生的问题处理
Jun 11 #PHP
You might like
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
python模块之time模块(实例讲解)
2017/09/13 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
python是怎么被发明的
2020/06/15 Python
python创建文本文件的简单方法
2020/08/30 Python
协议书怎么写
2014/04/21 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
2014年村委会工作总结
2014/11/24 职场文书
个人工作总结怎么写?
2019/04/09 职场文书