博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用PHP实现常用的数据结构之栈(小白系列文章四)
阅读量:6711 次
发布时间:2019-06-25

本文共 3844 字,大约阅读时间需要 12 分钟。

/***    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'].'>';    }

    最后

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

    转载地址:http://realo.baihongyu.com/

    你可能感兴趣的文章
    Vuex源码学习(四)module与moduleCollection
    查看>>
    python基础总结 Part.1
    查看>>
    【OC梳理】description
    查看>>
    一篇不太一样的RxJava介绍(二):关于操作符背后的故事
    查看>>
    FFmpeg模块介绍
    查看>>
    张家口a货翡翠,梧州a货翡翠
    查看>>
    JS Object的静态方法汇总( 上 )
    查看>>
    到手机里面去点击信任就行了。每次都是这样出错。
    查看>>
    java B2B2C Springcloud多租户电子商城系统-Eureka服务端与客户端常用配置
    查看>>
    (十一)java版b2b2c社交电商spring cloud分布式微服务-docker部署spring cloud项目
    查看>>
    jvm疯狂吞占内存,罪魁祸首是谁?
    查看>>
    表格存储Tablestore权威指南(持续更新)
    查看>>
    java B2B2C源码电子商城系统-Kafka快速入门
    查看>>
    Spring Cloud云服务 - HongHu架构common-service 项目构建过程
    查看>>
    hadoop中hive原理及安装
    查看>>
    pear默认安装后一个小bug
    查看>>
    我的友情链接
    查看>>
    nginx-通过Nginx统计当前每个域名流量
    查看>>
    家庭电路 功率和负荷
    查看>>
    SECURITY-Dockerfile写法
    查看>>