资讯专栏INFORMATION COLUMN

利用PHP实现常用的数据结构之栈(小白系列文章四)

array_huang / 2767人阅读

摘要:堆栈算法引子栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。

/**
*    PHP堆栈算法
*    Created on 2017-4-27
*    Author     entner
*    Email     1185087164@qq.com
*/
引子

    栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。其中几个典型的运行如下:

计算机四则运算

树的递归遍历(所以树和栈有紧密的联系)

历史记录(文件流)

路径追踪

参看:栈的经典运用

一、默写栈结构
默写会让你记忆更深刻,同时也会锻炼抽象的逻辑思维,一边看不懂,就多看几遍,
再查一查相关资料,应该问题不大,你甚至可以找张纸默写一下。
/**
*    InitStack    初始化栈(单栈)
*    声明一个类,构造空数组、数组长度、栈顶指针3个属性
    typedef int SElememtType    //构造一个栈结构数据类型实际可认为为整形
    typedef Struct{
        SElememtType data[MaxSize] //声明栈空间
        int top                 //声明栈顶指针
    }Stack;
*/

/**
*    Push    入栈(单栈)
*    实例化栈,并注入S,判断,先后移栈顶指针,再新增栈顶元素
    
    Status Push(Stack *S, int e){
        //    判断是否为满栈    
        if(S->top == n-1){
            return error;    //满栈
        }
        S->top =  S->top+1; //栈顶元素往后移动一位
        S->data[S->top] = e;//赋值给栈顶元素
        return ok;
    }
*/

/**
*    Pop    岀栈(单栈)
*    实例化栈,并注入S,判断,先移除栈顶元素,再前移栈顶指针
    
    Status Pop(Stack *S, int e){
        if(S->top == -1){
            return error;    //空栈
        }
        e = S->data[S->top];
        unset(e)            //将栈顶元素移出(销毁)
        S->top = S->top -1; //栈顶元素向前移动一位
    }
*/

/**
*    ClearStack    清空栈(单栈)
*    当栈存在且非空,遍历栈顶元素并销毁
    
    Status ClearStack(){
        if(S->top == -1){
            return error;    //空栈
        }
        for(S->top;S->top>1;S->top--){
            unset(S->data[S->top]);
        }
    }
*/
二、栈结构基本实现
top == $this->MaxSize){
            return error;
        }
        /*    先后移栈顶指针后赋值    */
        $this->top = ++$this->top;
        $this->arr[$this->top] = $e;
        /*    输出    */
        echo "栈顶指针现在所属位置".$this->top."--";
        echo "$e 入栈成功"."
"; } /** *TODO:岀栈操作 */ public function Pop(){ /* 判断:空栈则返回错误 */ if($this->top == -1){ return error; } /* 先移除栈元素针后前移栈顶指针 */ $this->out = $this->arr[$this->top]; $this->top = --$this->top; /* 输出 */ echo "栈顶指针现在所属位置".$this->top."--"; echo "$this->out 岀栈成功"."
"; /* 销毁移除元素 */ unset($this->out); } /** *TODO:程序结束时执行 */ public function __destruct(){ echo "over"; } } $stack = new Stack(); $stack->Push("entner");//Push没有加循环,可参看系列文章三-队列 $stack->Push("susan"); $stack->Push("george"); $stack->Pop(); //这里同样可以使用循环操作 $stack->Pop(); $stack->Pop();
三、栈的应用实现-递归-面包屑导航栏

【HTML-Web布局】

    目录结构如下:
   
        电脑---
                |
                |
                电脑配件---
                         |
                         |
                         显示器
                         固态硬盘
                    
                网络产品---
                         |
                         |
                         路由器
                         无线网卡
                         
                         
                         
                         
  



    
    



";        
    echo "
  • ".""."电脑配件".""."
  • "; echo "".""."显示器"."".""."
    "; echo "".""."固态硬盘"."".""."
    "; echo "
  • ".""."网络产品".""."
  • "; echo "".""."路由器"."".""."
    "; echo "".""."交换机"."".""."
    "; echo ""; ?>

    【后台逻辑执行】

    link();
            $res  = mysqli_query($conn,"select * from cat");
    
            $arr = array();//【注:这个$arr放在函数外面不可以,应该是函数作用域限制】
            while($row = mysqli_fetch_array($res,MYSQLI_ASSOC)){
                /*    遍历结果集放入数组        */
                $arr[] = $row;
            }
            while($cat_id>0){
                foreach($arr as $k=>$v){
                    if($cat_id == $v["cat_id"]){
                    $list[] = $v;
                    $cat_id = $v["pid"];
                    
                    }
                }
                
            }
            return $list;
        }
    
        echo "
    ";
    
        $list = array_reverse(mbx($cat_id));
        print_r($list);
        foreach($list as $k => $v){
            echo $v["Catname"].">";
        }
    最后

    如果您觉得这篇文章对您有帮助,请您为我点个赞吧:)毕竟敲字配上感冒还是有点...

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/22879.html

    相关文章

    • 利用PHP实现常用数据结构之栈小白系列文章

      摘要:堆栈算法引子栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。 /** * PHP堆栈算法 * Created on 2017-4-27 * Author entner * Email 1185087164@qq.com */ 引子     栈...

      yankeys 评论0 收藏0
    • 利用PHP实现常用数据结构数据结构浅析(小白系列文章二)

      摘要:数据结构基本概念拆成数据和结构两个词来看,结构就是经过排列组合后映射到内存的一种关系,你想想化学中的分子结构就明白了,所以数据结构就是数据之间的一种关系,利用这些关系去处理强逻辑问题。该结构的数据元素之间存在着多对多的关系,也称网状结构。 数据结构起源与起因 起因:       因为现实世界问题大多数是复杂的而非简单的数值计算,将数据进行适当的排序、组合将有利于计算机对复杂性逻辑问题的...

      DesGemini 评论0 收藏0
    • 利用PHP实现常用数据结构数据结构浅析(小白系列文章二)

      摘要:数据结构基本概念拆成数据和结构两个词来看,结构就是经过排列组合后映射到内存的一种关系,你想想化学中的分子结构就明白了,所以数据结构就是数据之间的一种关系,利用这些关系去处理强逻辑问题。该结构的数据元素之间存在着多对多的关系,也称网状结构。 数据结构起源与起因 起因:       因为现实世界问题大多数是复杂的而非简单的数值计算(例如:图像、视频、声音),将数据进行适当的排序、组合将有利...

      Yumenokanata 评论0 收藏0
    • 利用PHP实现常用数据结构之队列(小白系列文章三)

      摘要:队列算法名词解释在计算机编程语言中用来为复杂的声明定义简单的别名例如,你不用像下面这样重复定义有个字符元素的数组只需这样定义,类型即代表了具有个元素的字符数组,使用方法如下中译为结构,其实就是定义抽象数据类型例这个就是一个由班级姓名年龄 /** * PHP队列算法 * Created on 2017-4-25 * Author entner * Emai...

      Tony 评论0 收藏0
    • Javascript数组系列之栈与队列

      摘要:所谓数组英语,是有序的元素序列。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。在栈中添加数据和删除数据也被称为推入和弹出,而且推入和弹出只会发生在栈的顶部。栈是一种数据结构,而队列则是一种的数据结构,即先进先出。 所谓数组(英语:Array),是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称...

      sunsmell 评论0 收藏0

    发表评论

    0条评论

    最新活动
    阅读需要支付1元查看
    <