基于PHP的数据结构和括号匹配算法实例

基于PHP的数据结构和括号匹配算法实例
本文介绍了栈的数据结构和基于PHP的括号匹配算法,供大家参考

堆栈体现了先出,即后进先出的队列,它体现了先进先出FIFO,是。

堆栈操作
(array_pop) / /丙二醇醚
(array_push) /尾为


(array_shift) /头。
(array_unshift) /头

使用案例:验证一个数学公式是正确的,如{ 2×3 { x×y + 5 + m×(I-J) / 3 } + K *(4 +(T + 9))}。

分析:公式的正确与否,反映在括号的匹配中。括号是完全匹配的。这个算法没有问题。那么如何测试一个公式中括号的匹配呢很多人认为使用正则表达式。我想不出如何编写这个规则,如何实现嵌套关系。
功能checkmatch($str){
如果(!STR)返回false;
$ ARR = str_split($str);
左=数组({、{、());
数组(}、}、);
堆栈=数组();
复位($ ARR); / /而(复位)需要遍历数组,防止遍历是不完整的
而(表(美元美元关键,Val)=每($ ARR)){
如果(in_array($ Val,左美元,真)){
堆栈
array_push(合栈,$ Val); / /把整个左括号栈
} else if(in_array($ Val,美元吧,真的)){
topstack美元=端($栈); / /如果括号元素堆栈的顶部必须与左括号匹配(因为括号对应),取出栈顶。
如果(isset($ topstack)!空(美元topstack)){
如果(array_search($ Val,美元吧,真的)= array_search(topstack美元,美元离开,真)){ / /确定当前的左、右括号不匹配的括号
堆栈
array_pop($栈); / /,在栈的话
其他{ }

返回false;
}
其他{ }

返回false;右括号,因为没有删除相应的左括号。
}
}
}
返回空($堆栈)为真:假;循环结束后判断堆栈是否有任何值,即多个左括号。
}
为测试={ 2×3 { x×y + 5 + m×(I-J) / 3 } + K *(4 +(T + 9)});
var_dump(checkmatch($试验));

在上面的代码堆栈是由array_pop和array_push实施;以同样的方式,也可以和array_shift和array_unshift实施。

附录:队列操作
(array_shift) /头
(array_push) /尾为


array_unshift / /头。
array_pop / /丙二醇醚

关于PHP相关内容的更多读者感兴趣的读者可以看到特别站:PHP数据结构和算法教程

希望本文能对PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部