PHP链表的记录

<?php
/**

 * Date: 2017/3/31
 * Time: 21:13
 */
class Node {
    private $Data;
    private $Next;

    public function getNext()
    {
        return $this->Next;
    }
    public function getData()
    {
        return $this->Data;
    }
    public function setData($value)
    {
        $this->Data = $value;
    }
    public function setNext($next)
    {
        $this->Next = $next;
    }
public  function __construct($value,$next){
    $this->setData($value);
    $this->setNext($next);
}

}
class listNode{
    private $header;
    public function getHeader()
    {
        return $this->header;
    }
    public function setHeader($header)
    {
        $this->header = $header;
    }
   public function __construct(){
    $this->setHeader(new Node(null,null));
}
    public function  add($data){
        $node = $this->header;
        while($node->getNext()!= null){
            $node = $node->getNext();
        }
        $node->setNext(new Node($data,null));
    }
    public function  get(){
        $node =$this->header;
        if($node->getNext() == null){
                print("空");
        }
        while($node->getNext()!=null){
            print($node->getNext()->getData());
            if($node->getNext()->getNext() == null){
                break;
            }
            $node = $node->getNext();
        }
    }
    public function remove($data){
        $node =$this->header;

        while($node->getNext()!=null && $node->getNext()->getData()!= $data){

            $node = $node->getNext();
        }
        if($node->getNext() != null){
            $node->setNext($node->getNext()->getNext());

        }
//        unset($node->getNext());

    }

    public function addAfter($data,$a){

    $node = $this->header;
        while($node->getNext()&&$node->getData()!=$a){
            $node = $node->getNext();
        }
        if($node->getNext() == null){
            return ;
        }else{
            $b = $node->getNext();
            $node->setNext(new Node($data,$b));
        }

    }

    public function addBefore($data,$a){
        $node = $this->header;
        if($node->getData() == $a){
            new Node($data,$node);
        }
        while($node->getNext()&&$node->getNext()->getData()!=$a){
            $node= $node->getNext();
        }
        if($node->getNext() ==null){
            return ;
        }else{
            $b = $node->getNext();
            $node->setNext(new Node($data,$b));
        }
    }

    public  function updata($data,$a){
        $node= $this->header;
        if($node->getData()==$a){
            $node->setData($data);
        }
        while($node->getNext()&&$node->getData()!=$a){
            $node = $node->getNext();
        }
        if($node->getData()==$a){

            $node->setData($data);
        }else{
            return ;
        }
    }
}
//以下为测试代码
$a= new listNode();
$a->add(1);
//$a->add(2);
//$a->add(3);
//$a->add(4);
//$a->remove(2);
$a->addBefore(6,3);
$a->updata(6,22);
$a->get();
时间: 2024-12-09 23:38:46

PHP链表的记录的相关文章

hdu 1387 Team Queue (链表)

题目大意: 不同的人在不同的队伍里,插入链表的时候假设这个链表里有他的队友,就把它放到最后一个队友的最后.假设没有队友,就把它放到整个链表的最后面. 出链表的时候把第一个人拿出来. 思路分析: 要模拟这个链表就要记录这整个链表中的队伍存在的情况. 所以要再开一个链表的头指针和尾指针,在整个大的链表中再模拟小区域的链表. 然后就是deque部分,也就是注意head的推断以及更新. #include <cstdio> #include <iostream> #include <a

链表的中点,是否有环,有环时环的起点,环的长度,链表的长度

查找链表的中点 LinkNode* middle(LinkNode* head) {      LinkNode *fast = head;       //快慢指针起点相同      LinkNode *slow = head;            //使用快慢指针      while(fast && fast->next)      {           slow = slow->next;           fast = fast->next->nex

双端链表

双端链表 链表作为数组之外的一种常用序列抽象, 是大多数高级语言的基本数据类型, 因为 C 语言本身不支持链表类型, 大部分 C 程序都会自己实现一种链表类型, Redis 也不例外 —— 实现了一个双端链表结构. 双端链表作为一种常见的数据结构, 在大部分的数据结构或者算法书里都有讲解, 因此, 这一章关注的是 Redis 双端链表的具体实现, 以及该实现的 API , 而对于双端链表本身, 以及双端链表所对应的算法, 则不做任何解释. 读者如果有需要的话,可以参考维基百科的双端链表词条,里面

链表学习练习题

题目来源:SWUST OJ 程序设计C 实验六 结构体 题目三 学生结构体链表(0068) Description 用结构体建立学生信息,学生信息包括学号.姓名.成绩,建立一个有 n 名学生的链 表, 并将链表输出. Input 一次输入学生信息包括学号.姓名.0 0 0结束程序 Output 从链表表头到表位依次输出. Sample Output C1001 Li 70 M1002 He 89 E1003 Xie 83 M1004 Wu 92 E1005 Bao 80 Sample Input

iOS 单链表算法的一些问题

链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn

十字链表 Codeforces Round #367 E Working routine

1 // 十字链表 Codeforces Round #367 E Working routine 2 // 题意:给你一个矩阵,q次询问,每次交换两个子矩阵,问最后的矩阵 3 // 思路:暴力肯定不行.我们可以每个元素建立十字链表,记录右边和下边的元素,和每个元素的下标(从0开始),每次询问只需要交换四条边的指向即可. 4 // 本题要建立(n+1)*(m+1)的矩阵 5 6 #include <bits/stdc++.h> 7 using namespace std; 8 #define

二叉树的二叉链表存储及其Java实现

二叉链表存储的思想是让每个节点都记住它的左.右两个子节点,为每个节点增加left.right两个指针,分别引用该节点的左.右两个子节点,如图所示: 其中,每个节点大致有如下定义: class Node{ T data; Node left; Node right; } 对于这种二叉链表存储的二叉树,如果程序需要,为指定节点添加子节点也非常容易,让父节点的left.right引用指向新节点即可. Java实现代码: package com.liuhao.DataStructures; public

Python与数据结构[0] -&gt; 链表[2] -&gt; 链表有环与链表相交判断的 Python 实现

链表有环与链表相交判断的 Python 实现 目录 有环链表 相交链表 1 有环链表 判断链表是否有环可以参考链接, 有环链表主要包括以下几个问题(C语言描述): 判断环是否存在: 可以使用追赶方法,定义两个指针slow和fast,分别以1步和2步前进,若存在环则两者会相遇,否则fast遇到NULL时则退出: 获取环的长度:若存在环,则以相遇点为起点,fast和slow再次开始前进,第二次碰相遇slow走过的步数(1圈)即为环长度: 找出入环点:相遇点到连接点的距离 = 头指针到连接点的距离,因

MySQL-3 行记录的存储结构

本文同样参考小孩子写的<MySQL是怎样运行的:从根儿上理解MySQL> 来总结下,一条记录在底层的存储逻辑是怎样的. InnoDB页简介 这个存储引擎是将表中的数据存储到磁盘上,真正的数据处理是在内存中,innodb将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,大小一般为16KB. 行格式 指定行格式: CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 ALTER TABLE 表名 ROW_FORMAT=行格式名称 compact行格式 一条完整的