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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
php自动跳转中英文页面
Jul 29 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
php处理restful请求的路由类分享
Feb 27 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
php实现商城购物车的思路和源码分析
Jul 23 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实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
python 使用get_argument获取url query参数
2017/04/28 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
三万活动总结
2014/04/28 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL