数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
生活随笔
收集整理的這篇文章主要介紹了
数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
括號匹配問題和逆波蘭表達式求值問題
基于上一節已經使用python代碼對棧進行了簡單的實現,這一節我們在其基礎上解決兩個常見的問題
案例
括號匹配問題
在給定的字符串中,編寫程序實現確定該字符串類的括號是否匹配的問題
使用棧解決這個問題的思路:
括號匹配python代碼實現
然后這里導入的Stack是上一節棧的實現寫的代碼,也就使用到了pop和push的方法以及len屬性,代碼量也不算很多,我就直接復制過來了,方便查看,這里功能實現起來也是非常的簡單,就不做過多贅述來解釋了。
class Node:def __init__(self, item):self.item = itemself.next = Noneclass Stack:def __init__(self):self.head = Noneself.len = 0def is_empty(self):return not self.len# def length(self):# return self.lendef push(self, item):"""Push an element into the stack"""node = Node(item)node.next = self.headself.head = nodeself.len += 1def pop(self):"""Pop a value from the stack top"""# if not self.head:# raise IndexError("pop from empty list")cur = self.headif self.head:self.head = self.head.nextself.len -= 1return cur逆波蘭表達式
在定義逆波蘭表達式求值問題之前,我們先來看一下中綴表達式是什么:
- 定義:中綴表達式是一個通用的算術或邏輯公式表示方法,二元運算符總是會在兩個操作數的中間
舉個栗子:
- 例如:1 + 3 * 2和2 - ( 1 + 3 ),運算符(+ - * /)都是在兩個值的中間
這種表達式雖然對于我們人類來說觀看和使用起來都是非常簡單的,但是對于計算機并不太友好,這是因為這種表達式并不是有順序的,在運算時還可能涉及到很多優先級順序的判斷
因此我們引入了中綴表達式轉后綴表達式的概念,這里的后綴表達式就是我們所說的逆波蘭表達式
- 簡介:逆波蘭式(Reverse Polish notation,RPN,或逆波蘭記法),也叫后綴表達式(將運算符寫在操作數之后)
逆波蘭表達式的定義描述看起來晦澀難懂,簡單的說就是將運算符寫在操作數之后的表達式,對定義描述感興趣的同學可以自行百度一下,這里我們用幾個例子直觀的感受一下
通過結果看轉換前的狀態會比較好理解:
代碼實現思路:
- 如果當前字符為變量或者為數字,則壓棧,如果是運算符,則將棧頂兩個元素彈出作相應運算,結果再入棧,最后當表達式掃描完后,棧里的就是結果。
實現流程圖:
python代碼實現
這里先要寫一個實現棧的類方法:(也可以參照前期的棧實現文章)
運行結果:
The computation of ('2', '18', '13', '-', '*', '12', '4', '/', '-') is 7.0 The result is 7.0實現過程比較簡單,就不過多贅述了
總結
以上是生活随笔為你收集整理的数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA初次使用Tomcat运行项目(如
- 下一篇: 智慧交通day03-车道线检测实现05: