/*** 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 "
【后台逻辑执行】
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'].'>'; }
最后
如果您觉得这篇文章对您有帮助,请您为我点个赞吧:)毕竟敲字配上感冒还是有点...