/** * 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'].'>'; }
若是您以爲這篇文章對您有幫助,請您爲我點個贊吧:)畢竟敲字配上感冒仍是有點...算法