什么是链表?(依据百度词条查询而得)

链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每个元素称为结点)组成,结点能够在执行时动态生成。每个结点包含两个部分:一个是存储数据元素的数据域,还有一个是存储下一个结点地址的指针域。

经过查询资料和观摩了站点不同版本号的链表后。小弟自己尝试着写了一个PHP版本号的单链表,希望对大家理解链表有所帮助。

<?php

//定义结点

class Node{

    public $id;//结点ID

    public $data;//结点数据

    public $next;//指向下一结点

    public function __construct($id,$data){

        $this->id=$id;

        $this->data=$data;

        $this->next=NULL;

    }

}

class Linklist{

    private $head;//定义头结点

    public function __construct($id=0,$data=NULL){

        $this->head=new Node($id,$data);

    }

    //插入结点

    public function addNode($node){

        $head=$this->head;

        //插入之前检查ID是否冲突

        if($this->getNode($node->id)!=false){

            echo "您要插入的ID为".$node->id."数据为".$node->data."的结点已经存在该ID。请改动ID后重试<br>";

            return false;

        }

        while($head->next!=NULL){

            if($head->next->id >= $node->id){

                break;

            }

            $head=$head->next;

        }

        $node->next=$head->next;

        $head->next=$node;



    }



    //删除结点

    public function delNode($id){

        $head=$this->head;

        $temp=false;

        //注意。删除操作须要找到须要删除的前一个结点

        while($head->next != NULL){

            if($head->next->id==$id){

                $temp=true;

                break;

            }

            $head=$head->next;

        }

        if($temp==true){

            if($head->next->next==null){

                $head->next=NULL;

            }

            else

                $head->next=$head->next->next;

            

        return true;

    }

    else {

        echo '未找到id为'.$id.'的结点<br>';

    }

    }



    //获取链表

    public  function getList(){

        $head=$this->head;

        if($head->next==NULL){

            echo '该链表为空';

        }

        while($head->next !=NULL){

            if($head->id != 0)

            echo 'ID为'.$head->id.'的结点中的数据为'.$head->data.'<br/>';

            $head=$head->next;

        }

            echo 'ID为'.$head->id.'的结点中的数据为'.$head->data;

    }



    //获取结点

    public function getNode($id){

        $head=$this->head;

        while($head !=NULL){

            if($head->id==$id)

                return $head->data;

            $head=$head->next;

        }

        return false;

    }



    //获取长度

    public function getLength(){

        $head=$this->head;

        $num=0;

        while($head->next !=NULL){

            $num++;

            $head=$head->next;

        }

        return $num;

    }

}

$a=new Linklist;

$a->addNode(new Node(1,"Hello Word"));

$a->addNode(new Node(2,3));

$a->addNode(new Node(2,11123));

$a->addNode(new Node(3,11123));

$a->getList();

$b=$a->getNode(3);

$c=$a->getLength();

var_dump($b);

var_dump($c);

?>

最后为測试代码,以下是測试结果:

小弟初学。哪里不正确的希望大家能够包容下。给点建议。

浅谈PHP数据结构之单链表的更多相关文章

  1. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

  2. javascript数据结构之单链表

    下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下. //数 ...

  3. 数据结构之单链表的实现-java

    一.单链表基本概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元(一般是非连续存储单元)存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素data + 指针next ...

  4. python 数据结构之单链表的实现

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  5. 数据结构(一) 单链表的实现-JAVA

    数据结构还是很重要的,就算不是那种很牛逼的,但起码得知道基础的东西,这一系列就算是复习一下以前学过的数据结构和填补自己在这一块的知识的空缺.加油.珍惜校园中自由学习的时光.按照链表.栈.队列.排序.数 ...

  6. 浅谈PHP数据结构之栈

    今天開始进阶自己的PHP,首先一切的编程语言都须要修炼自己的"内功",何为程序猿的"内功",我想大概就是数据结构和算法了吧 .毕竟是灵魂,是普通程序猿到高级程序 ...

  7. 数据结构 - 静态单链表的实行(C语言)

    静态单链表的实现 1 静态链表定义 静态链表存储结构的定义如下: /* 线性表的静态链表存储结构 */ #define MAXSIZE 1000 /* 假设链表的最大长度是1000 */ typede ...

  8. 数据结构 - 动态单链表的实行(C语言)

    动态单链表的实现 1 单链表存储结构代码描述 若链表没有头结点,则头指针是指向第一个结点的指针. 若链表有头结点,则头指针是指向头结点的指针. 空链表的示意图: 带有头结点的单链表: 不带头结点的单链 ...

  9. 【数据结构】单链表介绍及leetcode206题反转单链表python实现

    题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/ 文章目录 单链表介绍 链表 概念 种类 优缺点 单链表(slist) leetc ...

随机推荐

  1. [Windows Server 2012] Tomcat安全加固方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:Tomca ...

  2. easyui 使用笔记

    http://www.easyui.info/archives/1435.html datagrid 服务端分页 服务端分页,高效,快捷!强力推荐! easyui的datagrid服务端分页,通过设置 ...

  3. Kafka 入门和 Spring Boot 集成

    目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...

  4. Pycharm:debug调试时使用参数

    一种操作方法: 文章链接:MAC下使用Pycharm,debug调试时怎样带参数 今天在网上找了一个例子敲代码,因为我使用的是PyCharm,例子运行时需要带参数,开始不知道怎么带参数,网上搜了大半天 ...

  5. SSL协议提供的服务

    SSL协议提供的服务主要有: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器: 2)加密数据以防止数据中途被窃取: 3)维护数据的完整性,确保数据在传输过程中不被改变.

  6. Python 之类型转换

    # int(x[, base]) 将x转换为一个整数,base为进制,默认十进制 # # long(x[, base] ) 将x转换为一个长整数 # # float(x) 将x转换到一个浮点数 # # ...

  7. CentOS安装Nodejs-v8.11.1

    (1)到NodeJs官网(https://nodejs.org/en/download/),复制下载链接 (2)下载并解压 命令:wget https://nodejs.org/dist/v8.11. ...

  8. vue02 过滤器、计算和侦听属性、vue对象的生命周期、阻止事件冒泡和刷新页面

    3. Vue对象提供的属性功能 3.1 过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 3.1.1 使用Vue.fil ...

  9. tab切换案例

    做个简单的tab切换效果,分别于jquery和js操作 (1)jQuery操作 先看下效果: <!DOCTYPE html> <html lang="en"> ...

  10. 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题

    注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...