Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert die Stapeldatenstruktur und den Klammerabgleich

PHP implementiert die Stapeldatenstruktur und den Klammerabgleich

小云云
小云云Original
2018-01-30 10:01:311515Durchsuche

Der Stapel verkörpert Last-In-First-Out, also LIFO. Die Warteschlange verkörpert das First-In-First-Out-Prinzip, also FIFO. In diesem Artikel wird hauptsächlich die Implementierung der Stapeldatenstruktur und des Bracket-Matching-Algorithmus in PHP vorgestellt. Er analysiert anhand von Beispielen den Push- und Pop-Vorgang der Stack-Datenstruktur sowie die Fähigkeiten der Stack-basierten Bracket-Matching-Anwendung Ich brauche es und kann darauf verweisen. Ich hoffe, es kann jedem helfen.

Das Beispiel in diesem Artikel beschreibt die Implementierung der Stapeldatenstruktur und des Bracket-Matching-Algorithmus basierend auf PHP. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

Stapelbetrieb:


array_pop() //尾出
array_push() //尾进

oder


array_shift()//头进
array_unshift()//头出

Anwendungsfall: Überprüfen Sie, ob eine mathematische Formel korrekt ist, z. B. {2*3[x*y+5+m*(i-j )/3]+k* (4+(t+9))}.

Analyse: Die Richtigkeit einer Berechnung spiegelt sich in der Übereinstimmung verschiedener Klammern wider. Wie kann man also die Übereinstimmung der Klammern in einer Berechnung überprüfen? über die Verwendung regelmäßiger Regeln. Ich kann einfach nicht herausfinden, wie ich diesen regulären Ausdruck schreiben und die verschachtelte Beziehung implementieren soll. Hier kommt der Stapel zum Einsatz. Schauen Sie sich den Code unten an.


function checkMatch($str){
  if(!$str)return false;
  $arr = str_split($str);
  $left = array('{','[','(');
  $right = array('}',']',')');
  $stack = array();
  reset($arr);  //使用while遍历数组需要先reset(),防止遍历不完整
  while(list($key, $val) = each($arr)){
    if(in_array($val,$left,true)){
      //入栈
      array_push($stack,$val); //把出现的全部左括号压入栈中
    }else if(in_array($val,$right,true)){
      $topStack = end($stack); //如果出现右括号,则栈顶的元素肯定是与其匹配的左括号(因为括号是对应的),先取出栈顶元素。
      if(isset($topStack) && !empty($topStack)){
        if(array_search($val,$right,true) === array_search($topStack,$left,true)){ //判断当前右括号是不是与左括号匹配
          //出栈
          array_pop($stack); //匹配的话就pop出栈
        }else{
          //
          return false; //左右不匹配
        }
      }else{
        //
        return false; //右括号多,因为没取出对应的左括号
      }
    }
  }
  return empty($stack) ? true : false;  //循环完成后判断$stack中是否还有值,有的话证明左括号多
}
$test = '{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}';
var_dump ( checkMatch ( $test ) );

Der Stapel im obigen Code wird durch array_pop und array_push implementiert. Ebenso kann er auch durch array_shift und array_unshift implementiert werden.

Anhang: Warteschlangenbetrieb


array_shift() //头出
array_push() //尾进

oder


array_unshift //头进
array_pop //尾出

Verwandte Empfehlungen:

Umfassende Erklärung, wie PHP Beispiele für Stack-Datenstrukturen implementiert

Das obige ist der detaillierte Inhalt vonPHP implementiert die Stapeldatenstruktur und den Klammerabgleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn