/** * PHP堆栈算法 * Created on 2017-4-27 * Author entner * Email 1185087164@qq.com */
栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,可是栈知足必定的特性,那就是只有一个口,具备先入后出的特性,这种特性在计算机中有很普遍的运用。其中几个典型的运行以下:php
- 计算机四则运算
- 树的递归遍历(因此树和栈有紧密的联系)
- 历史记录(文件流)
- 路径追踪
参看:栈的经典运用css
默写会让你记忆更深入,同时也会锻炼抽象的逻辑思惟,一边看不懂,就多看几遍, 再查一查相关资料,应该问题不大,你甚至能够找张纸默写一下。
/** * 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]); } } */
<?php /** *TODO:栈元素输入输出 * 建立类,构造数组、数组长度、栈顶指针、岀栈标识4个属性 */ Class Stack{ protected $MaxSize = 10; protected $arr = []; protected $top = -1; protected $out; //岀栈标识 /** *TODO:入栈操做 *@pagram int $e 入栈元素 */ public function Push($e){ /* 判断:满栈则返回错误 */ if($this->top == $this->MaxSize){ return error; } /* 前后移栈顶指针后赋值 */ $this->top = ++$this->top; $this->arr[$this->top] = $e; /* 输出 */ echo "栈顶指针如今所属位置".$this->top."--"; echo "$e 入栈成功"."<br/>"; } /** *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 岀栈成功"."<br/>"; /* 销毁移除元素 */ 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布局】html
目录结构以下: 电脑--- | | 电脑配件--- | | 显示器 固态硬盘 网络产品--- | | 路由器 无线网卡 <!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> oi{ text-indent: 2px; } </style> </head> <body> <?php echo "<ul>"; echo "<li>".'<a href="stack_mbx.php?cat_id=1 ">'.'电脑配件'.'</a>'."</li>"; echo "<oi>".'<a href="stack_mbx.php?cat_id=3 ">'.'显示器'.'</a>'."</oi>"."<br/>"; echo "<oi>".'<a href="stack_mbx.php?cat_id=4 ">'.'固态硬盘'.'</a>'."</oi>"."<br/>"; echo "<li>".'<a href="stack_mbx.php?cat_id=2 ">'.'网络产品'.'</a>'."</li>"; echo "<oi>".'<a href="stack_mbx.php?cat_id=5 ">'.'路由器'.'</a>'."</oi>"."<br/>"; echo "<oi>".'<a href="stack_mbx.php?cat_id=6 ">'.'交换机'.'</a>'."</oi>"."<br/>"; echo "</ul>"; ?> </body> </html>
【后台逻辑执行】mysql
<?php //引入数据模型类 require_once("./DB.class.php"); /* 获取连接参数 */ $cat_id = $_GET['cat_id']; /* *TODO: 面包屑导航(递归思想) *@pagram int $cat_id 目录ID */ function mbx($cat_id){ $list = array(); $db = new DB("goods"); //这里必定要带上数据库名称,由于默认数据库是‘mail’ $conn = $db->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 "<pre>"; $list = array_reverse(mbx($cat_id)); print_r($list); foreach($list as $k => $v){ echo $v['Catname'].'>'; }
若是您以为这篇文章对您有帮助,请您为我点个赞吧:)毕竟敲字配上感冒仍是有点...算法