<?php
/*
* 单链表的PHP实现
*
* @author zhaojiangwei
* @since 2011/10/20
*/
//结点类
class Node{
private $next = NULL; //下一个结点指针
private $data = NULL; //数据
public function Node($data, $next = NULL){
$this->data = $data;
$next && $this->next = $next;
}
public function getData(){
return $this->data;
}
public function setData($data){
$this->data = $data;
}
public function getNext(){
return $this->next;
}
public function setNext($next){
$this->next = $next;
}
}
//单链表类
class LinkList{
private $data_list = NULL; //结点集
public function LinkList($data = false){
$this->data_list = array();
$title = new Node(NULL);
$this->data_list[] = $title;
if($data){
if(is_array($data)){
$this->addMoreData($data);
}else{
$this->addData($data);
}
}
}
//返回第N个结点的值
public function getNodeByNumber($number){
return $this->data_list[$this->findKeyByNumber($number)]->getData();
}
//添加一组结点
public function addMoreData($datas){
foreach($datas as $value){
$this->addData($value);
}
}
//添加结点统一入口,供外面调用
//$number 添加在第几个结点的后面
public function addData($data, $number = false){
$node = new Node($data);
if($number === FALSE || $number == count($this->data_list)){
$this->insertLastNode($node);
}elseif($number > count($this->data_list)){
return false;
}else{
$this->insertNode($node, $number);
}
}
//插入一个结点到最后
private function insertLastNode($node){
$node->setNext(NULL);
$lastKey = $this->findLastNode();
$insert_key = $this->insertNodeIntoArray($node);
$this->data_list[$lastKey]->setNext($insert_key);
}
//插入一个结点
private function insertNode($node, $number){
$insert_number = $this->findKeyByNumber($number);
$node->setNext($this->data_list[$insert_number]->getNext());
$insert_key = $this->insertNodeIntoArray($node);
$this->data_list[$insert_number]->setNext($insert_key);
}
//查找第N个结点对应的数组key
private function findKeyByNumber($number){
$i = $key = 0;
while($i < $number){
$key = $this->data_list[$key]->getNext();
$i ++;
}
return $key;
}
//将结点加入数组
private function insertNodeIntoArray($node){
$this->data_list[] = $node;
return $this->getLastKey();
}
//删除结点
public function deleteNode($number){
if($number == 0 || $number > count($this->data_list)){
return false;
}
$pre_key = $this->findKeyByNumber($number - 1);
$key = $this->data_list[$pre_key]->getNext();
$this->data_list[$pre_key]->setNext($this->data_list[$key]->getNext());
unset($this->data_list[$key]);
}
//查找某结点的前一个结点
private function getPreNodeKey($key){
foreach($this->data_list as $k=>$v){
if($v->getNext() == $key){
return $k;
}
}
return false;
}
//打印链表
public function getData_list(){
return $this->data_list;
}
//返回数组的最后一个键
private function getLastKey(){
end($this->data_list);
return key($this->data_list);
}
//判断某个键值是否存在
private function ifExistKey($key){
if(array_key_exists($key, $this->data_list)){
return true;
}
return false;
}
//查找尾结点
public function findLastNode(){
foreach($this->data_list as $key=>$value){
if($value->getNext() === NULL){
return $key;
}
}
}
}
?>
分享到:
相关推荐
在PHP中实现单链表 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要在PHP中通过面向对象的程序设计思想来实现单链表的数据结构...
PHP中实现链表需要定义一个节点类,通常包含两个属性:`data`(用于存储数据)和`next`(用于链接到下一个节点)。下面是一个简单的PHP单链表节点类的示例: ```php class Node { public $data; public $next; ...
单链表中数据元素之间的逻辑关系是由结点中的指针指示的,换句话说,指针为数据元素之间的逻辑关系的映像,则逻辑上相邻的两个元素其存储的物理位置不要求紧邻,因此,这种
以上代码段展示了如何在PHP中定义单链表,以及如何实现链表的翻转。运行test()函数后,可以看到链表被成功翻转。此外,文中还提到了一些PHP相关的数据结构和算法教程,对于深入学习PHP编程语言会有很大的帮助。
在这个PHP实现的单链表实例中,我们主要关注以下几个关键点: 1. **链表节点类(Node)**:这是单链表的基本组成单元。类`node`定义了三个属性:`$id`表示节点的唯一标识,`$name`存储节点的名称,`$next`是一个...
在本案例中,"链表-使用PHP实现的双向链表数据结构.zip" 是一个压缩文件,其中包含了一个使用PHP语言实现的双向链表数据结构的示例。双向链表是链表的一种变体,与单向链表不同,它允许从两个方向遍历链表。每个节点...
在PHP中,虽然其底层是C语言,但PHP提供了一种面向对象的方式来实现链表。我们可以通过定义一个类,例如`Hero`,来创建链表的节点。`Hero`类有四个成员属性:排名`$no`、姓名`$name`、昵称`$nickname`以及一个指向下...
总结来说,PHP单链表的实现主要涉及节点类的定义,以及对链表进行增、删、改、查的一系列方法。通过掌握这些基本概念和操作,程序员可以在实际项目中有效地利用链表解决各种问题。对于那些对数据结构和算法感兴趣的...
### PHP 实现页面静态化详解 #### 一、概述 在现代Web开发中,提高网站性能和用户体验至关重要。其中一种常见的方法就是实现页面静态化。本文将详细介绍如何使用 PHP 来实现页面静态化,包括纯静态化和伪静态化两...
总结来说,循环链表是一种非连续存储数据的结构,使用PHP实现时,可以通过定义节点类和链表类来创建、操作循环链表。通过这种方式,我们可以灵活地处理动态数据集,实现如插入、删除、遍历等功能。
PHP实现页面静态化 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要使用PHP 7中的文件读写功能与ob缓存机制实现纯静态页面的...
在本文中,我们将深入探讨如何使用PHP实现单链表数据结构。单链表是一种线性数据结构,每个元素(节点)包含数据和指向下一个元素的指针。在PHP中,由于其动态类型特性,我们可以方便地模拟链表的实现。 首先,我们...
《PHP实现链表的定义与反转功能详解》 在编程领域,链表是一种常见的数据结构,它由一系列节点构成,每个节点包含数据和指向下一个节点的引用。在PHP中,虽然数组是常用的存储数据的方式,但理解并实现链表的概念...
PHP作为广泛使用的服务器端脚本语言,有着丰富的功能来实现伪静态。本文将深入探讨PHP实现伪静态的多种方法,并提供实用全面的解决方案。 1. **URL重写** URL重写是实现伪静态最常用的方法,通过Apache或Nginx...
在本篇《PHP小教程之实现双向链表》中,我们将深入探讨如何使用PHP来创建和操作双向链表。双向链表是一种数据结构,每个节点不仅包含数据,还包含两个指针,一个指向前一个节点(`$pre`),另一个指向后一个节点(`$...
循环链表是数据结构中的一种链式存储结构,在PHP中也可以实现这一结构。在循环链表中,最后一个节点的指针指向链表的头节点,从而形成一个环状结构,使得在遍历到链表尾部时,还能继续回到链表的头部,继续遍历。 ...
【PHP实现页面静态化】是提高网站性能的重要手段,它将动态内容转化为静态HTML文件,减少服务器处理负担,提升用户体验。本案例主要介绍如何在PHP 7环境下进行页面静态化,包括纯静态化和伪静态化的实现。 一、开发...
实现PHP伪静态的方法主要有两种:URL重写和修改内部请求流程。 1. **URL重写**: - 使用Apache服务器,可以借助`mod_rewrite`模块进行URL重写。首先,在`.htaccess`文件中配置规则,例如: ``` RewriteEngine On...