• PHP 单链表


    <?php
    /*
    *顺序结构存储的线性表
    初始化线性表
    获取表的元素个数
    插入表
    删除表
    获取元素
    */

    class ShunXuTable {
    public $maxSize = 20;
    public $Index = 0;
    public $array = array();

    //初始化表
    public function __construct() {
    $this->Index = 0;
    $this->maxSize = 0;
    $this->array = array();
    }

    //获取当前的元素个数
    public function getNum() {
    return $this->Index;

    }

    //插入元素
    public function insert($i,$DateType) {
    if($i < 0 || $i > $this->Index) { //超出当前的最大元素的位置,或是小于0

    echo '参数不合法';

    } else if ($this->Index > $this->maxSize) { //超出已经定义的最大存储元素个数

    echo "超出已经定义的最大存储元素个数";
    } else {
    //从当前插入的位置的元素数据依次往后以一个位置

    for($j = $this->Index;$j>$i;$j--) {
    $this->array[$j] = $this->array[$j-1];
    }
    $this->Index++;
    $this->array[$i] = $DateType;
    return 1;
    }


    }

    //删除元素
    public function delete($i) {

    if($i < 0 || $i > $this->Index) { //超出当前的最大元素的位置,或是小于0

    echo '参数不合法';

    } else if ($this->Index > $this->maxSize) { //超出已经定义的最大存储元素个数

    echo "超出已经定义的最大存储元素个数";
    } else {
    //从当前插入的位置的元素数据依次往前以一个位置

    for($j = $i;$j<$this->Index;$j++) {
    $this->array[$j] = $this->array[$j+1];
    }
    $this->array[$this->Index] = null;
    $this->Index--;

    return 1;
    }

    }


    //获取元素
    public function getChar($i) {

    return $this->array[$i];
    }


    }

    /*
    链式存储结构
    1:定义结点
    next 指针域,指向下一个节点
    dateType 数据域存储数据值

    2:初始化
    头部节点的指针域为NULL,数据域为NUll
    head->next = null;
    head->dateType = null;
    3:插入数据:
    要在i位置插入一个节点,0<=i<=当前节点数量。
    要考虑因素,初始化,没有插入任何一个元素(插入到位置0处)。
    已有元素插入到i位置,需要找到i-1的元素,然后我们重新生成以节点,是i-1的节点指向新生成的节点,新生成的节点指向i-1原有指向的节点。
    4:删除一个元素:
    要在i位置,删除一个节点,我们首先要找到i-1的节点,是i-1的节点指向(I-1)->next->next;

    */
    //定义结点

    class Node {
    public $next; //指针域
    public $dateType;//数据域

    }

    class Nohead {
    public $head; //头结点

    public $size; //当前个数

    public function __construct() {
    $this->size = 0;
    $this->head = new Node;
    $this->head->next = null;
    $this->head->dateType = null;

    }

    //获得节点数
    public function getNum() {
    $p = $this->head;
    $size = 0;
    while($p->next != null) {
    $p = $p->next;
    $size ++;
    }
    return $size;
    }

    //插入节点
    public function insert($i,$DateType) {

    $p = $this->head;
    $j = -1;
    /*
    判断当前节点存在并且i节点存在的情况下
    $p->next != null 判断当前节点存在,且i节点存在
    $j < $i-1判断循环到I-1节点
    循环到要插入元素的位置的前一个元素。
    */
    while($p->next != null && $j <= $i-1) { //循环到要插入元素的位置的前一个元素。
    $p = $p->next;
    $j++;

    }

    if($j != $i-1) {//此条件判断$p为I-1节点,如果此时I-1为-1则$p 还是头结点

    echo "False";
    }

    $q = new Node; //新建一个结点
    $q->dateType = $DateType;

    $q->next = $p->next; //把插入当前元素的前一个元素的指向域赋予新建结点
    $p->next = $q; //把插入当前元素的前一个元素的指向域指向新建结点
    return 1;



    }


    //删除节点
    public function delete($i) {

    $p = $this->head;
    $j = -1;
    while($p->next != null && $j < $i-1) { //循环到要插入元素的位置的前一个元素。
    $p = $p->next;
    $j++;

    }

    if($j != $i-1) {

    echo "False";
    }



    $p->next = $p->next->next;

    return 1;




    }

    }

    echo "<br/><br/>:链式结构<br/>";
    $table = new Nohead;
    $table->insert(0,1);
    $table->delete(0);

    echo $table->getNum()."<br/>";
    $p = $table->head;
    while($p->next != null) {
    echo $p->dateType."<br/>";
    $p = $p->next;

    }

  • 相关阅读:
    Silverlight第三方控件收集
    我们三十以后才明白
    修复编译Silverlight&quot;不能找到AppManifest.xaml&rdquo;的错误
    Android消息通知
    理解和认识udev
    QT进度条
    WARNING: Application does not specify an API level requirement!
    Linux设备驱动中的异步通知与异步I/O
    Qtopia2.2.0 的配置和交叉编译
    Android Menus
  • 原文地址:https://www.cnblogs.com/phplhs/p/5504020.html
Copyright © 2020-2023  润新知