spl 教程二 数据结构

本文介绍了几种常用的数据结构,包括双向列表、栈、队列以及堆的实现与应用,并提供了具体的PHP代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双向列表

public function SplDoublyLinkedListTest(){
    $obj = new SplDoublyLinkedList();
    $obj->push(1);
    $obj->push(2);
    $obj->push(3);
    $obj->unshift(10);   //unshifit 替换双向链表的首部
    $obj->rewind();     //  使用current 必须调用rewind,把节点指针指向bottom节点
    $obj->next();    //    next 指向下一个节点
    $obj->prev();   // 指针指向上一个节点
    echo $obj->current();   //  指针指向当前结点
    if($obj->current())
    {
        echo "y";
    }else{
        echo "n";
    }

    if($obj->valid()){
        //如果当前节点是有效节点 valid则返回true
    }
    $obj->pop();
    //var_dump($obj);
    print_r($obj);


public function SplStackTest(){
    $stack = new SplStack();  //实例化堆栈
    $stack->push("a");        //向堆栈中加入数据
    $stack->push("b");
    $stack->push("c");
    $stack->offsetSet(0,'C');  //堆栈的节点0是top 的节点,设置节点的值
    $stack->rewind(); //双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向TOP所在的位置,而双向链表调用之后指向bottom所在的位置
    echo "qq".$stack->next();  // 堆栈的next与双向链表相反
    echo "re".$stack->current()."</br>";
    echo "bo".$stack->bottom()."</br>";
    echo "top".$stack->top();
    print_r($stack);
    $stack->rewind();
    while($stack->valid()){
        echo $stack->key()."=>".$stack->current()."</br>";
        $stack->next();
    }
    $pop = $stack->pop();
    echo $pop;
}

队列

public function SplQueueTest(){
    $que = new SplQueue();
    $que->enqueue("a");    //    入队列
    $que->enqueue("b");
    $que->enqueue("c");
    echo "bottom".$que->bottom()."</br>";
    echo "top".$que->top();
    $que->rewind();
    $que->dequeue();    //出队列
    print_r($que);
}

 /**
         * SplHeap
                SplMaxHeap
                SplMinHeap
         * 堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。
         * 根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序(堆排序)。
         * SplHeap 是一个抽象类,实现了Iterator , Countable接口。
         * 最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是继承它实现的,可以在PHP程序中直接使用。
         * @author  wanglitao
         */

        public function SplHeapTest(){

            $obj  = new SplMaxHeap();
            $obj ->insert(41) ;
            $obj ->insert(82) ;
            $obj ->insert(28) ;
            $obj ->insert(18) ;
            $obj ->insert(8) ;
            foreach( $obj as $number ) {
                echo $number.PHP_EOL ;
            }
//            依次输出 82 41 28 18 8
//排好序的数据
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值