博客
关于我
强烈建议你试试无所不能的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/

    你可能感兴趣的文章
    codeforces 500c New Year Book Reading 【思维】
    查看>>
    Auto reloading enabled
    查看>>
    GitHub的使用方法
    查看>>
    AT3576 Popping Balls
    查看>>
    springboot入门_多数据源
    查看>>
    如果一个游戏上面加一个透明层,js能不能实现 点击透明层的任意点 而正常玩游戏...
    查看>>
    图的m着色问题
    查看>>
    oracle 查询char类型的数据
    查看>>
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错...
    查看>>
    Android zxing扫描二维码 为什么有些机型扫描不出来或者很慢?
    查看>>
    SQLHelp sql数据库的DAL
    查看>>
    进阶第二课 Python内置函数(补)及自定义函数
    查看>>
    《王者荣耀》的英雄是怎么诞生的?有没有最厉害的英雄?
    查看>>
    公司常用几种请求
    查看>>
    python3 字符串格式化
    查看>>
    一个字符在字符串中出现最多的次数的打印
    查看>>
    图片的三级缓存
    查看>>
    js跨域问题解决方案
    查看>>
    (八)统一配置中心-Config
    查看>>
    I.MX6 Android CAN 命令行测试
    查看>>