PHP中模拟链表和链表的基本操作示例

5年以前  |  阅读数:961 次  |  编程语言:PHP 

模拟链表:


    <?php 
    /**
     * PHP实现链表的基本操作
     */
    class linkList {
      /**
       * 姓名
       * @var string
       */
      public $name = '';

      /**
       * 编号
       * @var int
       */
      public $id = 0;

      /*
       * 引用下一个对象
       */
      public $next = null;

      /**
       * 构造函数初始化数据
       * @param int $id
       * @param string $name
       */
      public function __construct($id = 0, $name = '') {
        $this->name = $name;
        $this->id  = $id;
      }

      /**
       * 遍历链表
       */
      public static function echo_link_list($head) {
        $curr = $head;
        while ($curr->next != null) {
          echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id;
          echo '<br>';
          $curr = $curr->next;
        }
      }

      /**
       * 添加新节点
       */
      public static function add($head, $id, $name) {
        $curr = $head;
        $obj = new linkList($id, $name);

        while ($curr->next != null) {
          // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置
          if ($curr->next->id > $id) {

            $obj->next = $curr->next;
            $curr->next = $obj;

            return true;
          } else if ($curr->next->id == $id) {

            echo '当前Id:'.$id.'重复了,请不要继续添加了!';
            echo '<br>';

            return false;
          }
          $curr = $curr->next;
        }
        // 添加节点到尾部
        if ($curr->next == null) {
          $curr->next = $obj;
        }
      }

      /**
       * 删除节点
       */
      public static function del($head, $id) {
        $curr = $head;

        while($curr->next != null) {
          if ($curr->next->id == $id) {
            $curr->next = $curr->next->next;
            return true;
          }
          $curr = $curr->next;
        }
      }

      /**
       * 修改节点
       */
      public static function edit($head, $id, $new_name) {
        $curr = $head;

        while($curr->next != null) {
          if ($curr->next->id == $id) {
            $curr->next->name = $new_name;
          }
          $curr = $curr->next;
        }
      }
    }

    $head = new linkList();
    linkList::add($head, 1, 'wangdk');
    linkList::add($head, 2, 'sunshuzhen');
    linkList::add($head, 8, 'wanghaha');
    linkList::add($head, 6, 'wangchufen');
    linkList::add($head, 6, 'wangchufen');
    linkList::add($head, 3, 'wangdaye');

    linkList::del($head, 1);
    linkList::edit($head, 2, 'hahaha');
    linkList::echo_link_list($head);

    ?>

链表的增删查改:


    <?php 
    /**
     * PHP实现链表的基本操作
     */
    class linkList {
      /**
       * 姓名
       * @var string
       */
      public $name = '';

      /**
       * 编号
       * @var int
       */
      public $id = 0;

      /*
       * 引用下一个对象
       */
      public $next = null;

      /**
       * 构造函数初始化数据
       * @param int $id
       * @param string $name
       */
      public function __construct($id = 0, $name = '') {
        $this->name = $name;
        $this->id  = $id;
      }

      /**
       * 遍历链表
       */
      public static function echo_link_list($head) {
        $curr = $head;
        while ($curr->next != null) {
          echo '姓名:'.$curr->next->name, ' 编号:'.$curr->next->id;
          echo '<br>';
          $curr = $curr->next;
        }
      }

      /**
       * 添加新节点
       */
      public static function add($head, $id, $name) {
        $curr = $head;
        $obj = new linkList($id, $name);

        while ($curr->next != null) {
          // 如果当前ID < 下一个ID,则添加到中间,添加节点到指定顺序位置
          if ($curr->next->id > $id) {

            $obj->next = $curr->next;
            $curr->next = $obj;

            return true;
          } else if ($curr->next->id == $id) {

            echo '当前Id:'.$id.'重复了,请不要继续添加了!';
            echo '<br>';

            return false;
          }
          $curr = $curr->next;
        }
        // 添加节点到尾部
        if ($curr->next == null) {
          $curr->next = $obj;
        }
      }

      /**
       * 删除节点
       */
      public static function del($head, $id) {
        $curr = $head;

        while($curr->next != null) {
          if ($curr->next->id == $id) {
            $curr->next = $curr->next->next;
            return true;
          }
          $curr = $curr->next;
        }
      }

      /**
       * 修改节点
       */
      public static function edit($head, $id, $new_name) {
        $curr = $head;

        while($curr->next != null) {
          if ($curr->next->id == $id) {
            $curr->next->name = $new_name;
          }
          $curr = $curr->next;
        }
      }
    }

    $head = new linkList();
    linkList::add($head, 1, 'wangdk');
    linkList::add($head, 2, 'sunshuzhen');
    linkList::add($head, 8, 'wanghaha');
    linkList::add($head, 6, 'wangchufen');
    linkList::add($head, 6, 'wangchufen');
    linkList::add($head, 3, 'wangdaye');

    linkList::del($head, 1);
    linkList::edit($head, 2, 'hahaha');
    linkList::echo_link_list($head);

    ?>

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例