久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

基于PHP實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)和括號(hào)匹配算法示例

這篇文章主要介紹了基于PHP實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)和括號(hào)匹配算法,結(jié)合實(shí)例形式分析了php數(shù)組操作實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的進(jìn)棧、出棧,以及基于棧的括號(hào)匹配應(yīng)用技巧,需要的朋友可以參考下

本文實(shí)例講述了基于PHP實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)和括號(hào)匹配算法。分享給大家供大家參考,具體如下:

棧,體現(xiàn)的是后進(jìn)先出,即LIFO。隊(duì)列,體現(xiàn)的是先進(jìn)先出,即FIFO。

棧操作:

array_pop() //尾出
array_push() //尾進(jìn)

array_shift()//頭進(jìn)
array_unshift()//頭出

用例:驗(yàn)證一個(gè)數(shù)學(xué)算式是否正確,比如{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}。

分析:對(duì)于一個(gè)算式的正確與否,就是體現(xiàn)在,各種括號(hào)的匹配上,括號(hào)完全匹配,算式就沒問題,那怎么來檢驗(yàn)一個(gè)算式里的括號(hào)匹配呢,碰到過很多人想著用正則。我是想不通這正則怎么寫,怎么實(shí)現(xiàn)嵌套關(guān)系。這個(gè)時(shí)候棧就派上用場(chǎng)了??聪逻叴a。

function checkMatch($str){
  if(!$str)return false;
  $arr = str_split($str);
  $left = array('{','[','(');
  $right = array('}',']',')');
  $stack = array();
  reset($arr);  //使用while遍歷數(shù)組需要先reset(),防止遍歷不完整
  while(list($key, $val) = each($arr)){
    if(in_array($val,$left,true)){
      //入棧
      array_push($stack,$val); //把出現(xiàn)的全部左括號(hào)壓入棧中
    }else if(in_array($val,$right,true)){
      $topStack = end($stack); //如果出現(xiàn)右括號(hào),則棧頂?shù)脑乜隙ㄊ桥c其匹配的左括號(hào)(因?yàn)槔ㄌ?hào)是對(duì)應(yīng)的),先取出棧頂元素。
      if(isset($topStack) && !empty($topStack)){
        if(array_search($val,$right,true) === array_search($topStack,$left,true)){ //判斷當(dāng)前右括號(hào)是不是與左括號(hào)匹配
          //出棧
          array_pop($stack); //匹配的話就pop出棧
        }else{
          //
          return false; //左右不匹配
        }
      }else{
        //
        return false; //右括號(hào)多,因?yàn)闆]取出對(duì)應(yīng)的左括號(hào)
      }
    }
  }
  return empty($stack) ? true : false;  //循環(huán)完成后判斷$stack中是否還有值,有的話證明左括號(hào)多
}
$test = '{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}';
var_dump ( checkMatch ( $test ) );

上述代碼中的棧,是由array_pop和array_push實(shí)現(xiàn)的;同理,也可以用array_shift和array_unshift實(shí)現(xiàn)。

附:隊(duì)列操作

array_shift() //頭出
array_push() //尾進(jìn)

array_unshift //頭進(jìn)
array_pop //尾出

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡(jiǎn)單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 免费一区在线观看 | 国产一区二区三区在线 | 免费在线一区二区 | 免费成人在线网站 | 成人av在线播放 | 亚洲成人av在线播放 | 亚洲444kkkk在线观看最新 | 97超碰在线免费 | 国产美女一区 | 久久国产精品91 | 欧美精品一区二区三区在线播放 | 国产黄色av网站 | 久久久高清 | 国产精品免费视频一区 | 国产一区免费视频 | 欧美中文字幕在线观看 | 亚洲国产欧美日韩 | 人人草人人干 | 九九九视频 | 欧美一区二 | 日韩国产欧美一区 | 欧美中文字幕一区二区 | 天天色影视综合 | 国产一区二区视频在线 | 国产成人福利 | 午夜影院中文字幕 | 国产精品av久久久久久久久久 | 亚洲国产网 | 久久久国产一区二区三区 | 二区三区视频 | 亚洲国产成人精品女人久久久 | 男女啪啪网址 | 久久色视频 | 一区二区福利视频 | 亚洲精品一 | 欧美日韩高清在线一区 | 国产一区二区三区色淫影院 | 久草视频在线播放 | 午夜色播 | 日韩第一夜| 精品久久久久久 |