PHP小教程之实现双向链表

看了很久数据结构但是没有怎么用过,在网上看到了关于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);
?>

(0)

相关推荐

  • 浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区) 规定:基本数据类型,一般放在栈区 复合数据类型,比如对象,放在堆区 定义一个类Hero 定义成员属性排名 $no 定义成员属性姓名 $name 定义成员属性昵称 $nickname 定义成员属性 $next,是一个引用,指向下一个Hero对象 定义构造函数,传递参数:

  • PHP链表操作简单示例

    本文实例讲述了PHP链表操作.分享给大家供大家参考,具体如下: 在php中运行数据结构,基本都是用数组模拟的,只是用一直思想而已. 今天遇到的这个问题是,两个链表进行合并. 链表合并效果图 问题描述:A链表是模版链表,B链表的长度不确定,A,B二个链表结合后形成C链表. 说一下编程思想:A链表是模版链表所以在运算完成了,长度了唯一不变的.而B链表的长度是不确定的.所以可以先对B链表进行判断,分了三步: B链表是不是为空 B链表是不是比A链表短或者相等 B链表是不是比A链表长 编程就是要列出尽可能

  • PHP 双链表(SplDoublyLinkedList)简介和使用实例

    双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址. PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作. SplDoublyLinkedList类摘要如下: SplDoublyLinkedList implements Iterator , ArrayAccess , Countable { public __construct ( void ) public void add ( mixed $index ,

  • PHP单链表的实现代码

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 单链表简介 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据. 关键代码如下所示: <?php /** * 单链表 */ class Demo { private $id; public $name; public $next; public function __construct ($id = ''

  • PHP环形链表实现方法示例

    本文实例讲述了PHP环形链表实现方法.分享给大家供大家参考,具体如下: 环形链表是一种链式存储结构,类似于单链表.区别是环形链表的尾节点指向头节点. 从而形成一个环, 环形链表是一种非常灵活的存储结构,可解决许多实际问题,魔术师发牌问题和约瑟夫问题 都能利用环形链表来解决,下面是一个完整的环形链表实例,使用php来实现的(参照韩顺平老师的php算法教程) /** * 环形链表的实现 * */ class child { public $no;//序号 public $next;//指向下个节点的

  • php实现单链表的实例代码

    复制代码 代码如下: <?php //链表节点 class node {     public $id; //节点id     public $name; //节点名称     public $next; //下一节点 public function __construct($id, $name) {         $this->id = $id;         $this->name = $name;         $this->next = null;     } } /

  • php 数据结构之链表队列

    php 链表队列 实例代码: class Queue{ private $last; private $first; private $oldfirst; private static $n=0; public function __construct(){ $this->last = null; $this->first = null; $this->oldfirst = null; } public function push($item){ $this->oldfirst =

  • PHP小教程之实现双向链表

    看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下.上一次分享了<PHP小教程之实现链表>,这次来补充说一下双向链表. 复制代码 代码如下: <?php        class Hero        {            public $pre=null;            public $no;            public $name;            public $next=null;           

  • PHP小教程之实现链表

    看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下. 复制代码 代码如下: class Hero{    public $no;//排名    public $name;//名字    public $next=null;//$next是一个引用,指向另外一个Hero的对象实例 public function __construct($no='',$name='')    {        $this->no=$no;        $this->

  • 如何让thinkphp在模型中自动完成session赋值小教程

    相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码: class ArticlelModel extends Model { protected $_auto = array ( array('addtime','time',1,'function'), array('username','getName',1,'callback') ); //这个函数获取s

  • C++ STL入门教程(2) list双向链表使用方法(附程序代码)

    一.简介 "Unlike other standard sequence containers, list and forward_list objects are specifically designed to be efficient inserting and removing elements in any position, even in the middle of the sequence." Lists将元素按顺序储存在链表中.与向量(vector)相比, 它允许快速

  • PHP双向链表定义与用法示例

    本文实例讲述了PHP双向链表定义与用法.分享给大家供大家参考,具体如下: 由于需要对一组数据多次进行移动操作,所以写个双向链表.但对php实在不熟悉,虽然测试各个方法没啥问题,就是不知道php语言深层的这些指针和unset有什么注意的地方,贴出来让大家教育吧.效率没测试....求谅解- <?php /** * **双向链表 * @author zhiyuan12@ */ /** * 链表元素结点类 */ class Node_Element { public $pre = NULL; // 前驱

  • PHP获取链表中倒数第K个节点的方法

    本文实例讲述了PHP获取链表中倒数第K个节点的方法.分享给大家供大家参考,具体如下: 问题 输入一个链表,输出该链表中倒数第k个结点. 解决思路 注意这个题目是返回节点,而不是返回值.返回值的话可以用栈来存储.返回节点则不能这样做. 设置两个指针,先让第一个指针移动k-1次.然后两个指针同时移动,当第一个指针到达最后一个节点,第二个指针就在倒数第k个节点. 注意边界:K长度可能超出链表长度,所以当第一个指针的next为空时,返回null 实现代码 <?php /*class ListNode{

  • PHP实现合并两个排序链表的方法

    本文实例讲述了PHP实现合并两个排序链表的方法.分享给大家供大家参考,具体如下: 问题 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解决思路 简单的合并排序.由于两个数列本来就是递增的,所以每次将两个数列中较小的部分拿过来就可以了. 实现代码 <?php /*class ListNode{ var $val; var $next = NULL; function __construct($x){ $this->val = $x; } }*/ f

  • SS xspace风格模板制作教程

    SS 风格模板区引导帖,来此必看![内含SS风格相关教程链接] 一.本版版规 引用: http://www.discuz.net/thread-759546-1-1.html本版供SupeSite/X-Space模板爱好者交流讨论.鼓励大家互助分享!二.发布分享模板格式 引用: http://www.discuz.net/viewthread.php?tid=759558发布和预览风格的发帖格式规范,违者当做删除处理.三.SS 风格模板相关教程 引用: ss6.0模板制作教程(二) ss6.0模

  • 微信小程序实现时间预约功能

    一个类似电商的时间预约功能,供大家参考,具体内容如下 1 .概述 我们在学习微信小程序或者做项目时,应该会遇到需要时间预约功能情况,那么这个时间预约功能我们应该怎么编写呢?于是就做了一个类似电商的时间预约功能,觉得有用,就独立出来成了个小插件,今天我们就分享这样的小教程.希望对大家有所帮助. 不多说了,上图来啦! 2. wxml <!--pages/orderTime/index.wxml--> <view class='containt'> <scroll-view cla

  • 快速使用docker-compose部署clickhouse的教程

    ClickHouse 是一个开源的面向列的 DBMS(由 Yandex 开发).ClickHouse 的工作速度比传统方法快 100-1000 倍.它适用于大数据.业务分析和时间序列数据.ClickHouse 是第一个与 Sybase IQ.Vertica 和 Snowflake 等专有数据库的性能.成熟度和可扩展性相匹配的开源 SQL 数据仓库. 在这个小教程中,我将向您展示如何以最少的设置安装 ClickHouse. 对于本教程,我们需要安装 Docker 和 docker-compose.

随机推荐