精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊棧在括號匹配和表達式求值中的應用

開發 前端
編程的本質來源于算法,而算法的本質來源于數學,編程只不過將數學題進行代碼化。

[[358578]]

編程的本質來源于算法,而算法的本質來源于數學,編程只不過將數學題進行代碼化。

算法,一門既不容易入門,也不容易精通的學問。

括號匹配這是Leetcode第20題,也是一道單調棧的簡單題。

給定一個只包括'(',')','{','}','[',']'的字符串,判斷字符串是否有效。

有效字符串需滿足:

  • 左括號必須用相同類型的右括號閉合。
  • 左括號必須以正確的順序閉合。
  • 注意空字符串可被認為是有效字符串。

輸入: "{[]}"輸出: true單調棧關鍵在于如何入棧和出棧。

用棧保存為匹配的左括號,從左到右一次掃描字符串,當掃描到左括號時,則將其壓入棧中;當掃描到右括號時,從棧頂取出一個左括號,如果能匹配上,則繼續掃描剩下的字符串。如果掃描過程中,遇到不能配對的右括號,或者棧中沒有數據,則說明為非法格式。

當所有的括號都掃描完成之后,如果棧為空,則說明字符串為合法格式;否則,說明未匹配的左括號為非法格式。

  1. def isValid(s): 
  2.     ""
  3.     :type s: str 
  4.     :rtype: bool 
  5.     ""
  6.     stack = [] 
  7.     paren_map ={')':'(',']':'[','}':'{'
  8.     for c in s: 
  9.         if c not in paren_map: 
  10.             stack.append(c) 
  11.         elif not stack or paren_map[c] !=stack.pop(): 
  12.             return False 
  13.     return not stack 
  14. s = input('輸入括號字符:'
  15. print(isValid(s)) 

在此題中,也可以利用python種的replace函數將成對的可匹配括號用空字符代替 ,之后依次進行 ,若是有效的括號 ,必然經過有限次循環后 ,字符串為空 ,則最后判斷字符串是否為空即可。思路簡單,實現也很容易:

  1. def isValid(s): 
  2.     ""
  3.     :type s: str 
  4.     :rtype: bool 
  5.     ""
  6.     n = len(s) 
  7.     if n == 0: return True 
  8.     while '()' in s or '{}' in s or '[]' in s: 
  9.         s = s.replace('{}','').replace('[]','').replace('()Val',''
  10.     return s == '' 

數學表達

式首先,我們來看一下數學表達式的三種形式:前綴表達式,中綴表達式,后綴表達式。

  • 中綴表達式(Infix Expression)就是我們平時常用的書寫方式,帶有括號。
  • 前綴表達式(Prefix Expression)要求運算符出現在運算數字的前面。
  • 后綴表達式(Postfix Expression)要求運算符出現在運算數字的后面,一般這兩種表達式不出現括號。后綴表達式,又稱逆波蘭式。

數學表達式的三種形式示例如下:

中綴表達式操作符是以中綴形式處于操作數的中間(例:3 + 4),中綴表達式是人們常用的算術表示方法。與前綴表達式(例:+ 1 2)或后綴表達式(例:1 2 +)相比,中綴表達式不容易被計算機解析,但仍被許多程序語言使用,因為它符合人們的普遍用法。

下面問題轉為為:如何利用棧實現中綴表達式求值,比如:34+13*9+44-12/3=191思路:利用兩個棧,其中一個用來保存操作數,另一個用來保存運算符。

我們從左向右遍歷表達式,當遇到數字,我們就直接壓入操作數棧;當遇到運算符,就與運算符棧的棧頂元素進行比較。

若比運算符棧頂元素優先級高,就將當前運算符壓入棧,若比運算符棧頂元素的優先級低或者相同,從運算符棧中取出棧頂運算符,從操作數棧頂取出2個操作數,然后進行計算,把計算完的結果壓入操作數棧,繼續比較。

  1. def infix_evaluator(infix_expression : str) -> int : 
  2.     '''這是中綴表達式求值的函數 
  3.     :參數 infix_expression:中綴表達式 需要用空格進行隔開 
  4.     ''
  5.     token_list = infix_expression.split() 
  6.     print(token_list) 
  7.     # 運算符優先級字典 
  8.     pre_dict = {'*':3,'/':3,'+':2,'-':2, '(':1} 
  9.     # 運算符棧 
  10.     operator_stack = [] 
  11.     # 操作數棧 
  12.     operand_stack = [] 
  13.     for token in token_list: 
  14.         # 數字進操作數棧 
  15.         print(token) 
  16.         # 10或者-10的情況 
  17.         if token.isdecimal() or token[1:].isdecimal():  
  18.             operand_stack.append(int(token)) 
  19.         # 左括號進運算符棧 
  20.         elif token == '('
  21.             operator_stack.append(token) 
  22.         # 碰到右括號,就要把棧頂的左括號上面的運算符都彈出求值 
  23.         elif token == ')'
  24.             top = operator_stack.pop() 
  25.             while top != '('
  26.                 # 每彈出一個運算符,就要彈出兩個操作數來求值 
  27.                 # 注意彈出操作數的順序是反著的,先彈出的數是op2 
  28.                 op2 = operand_stack.pop() 
  29.                 op1 = operand_stack.pop() 
  30.                 # 求出的值要壓回操作數棧 
  31.                 # 這里用到的函數get_value在下面有定義 
  32.                 operand_stack.append(get_value(top,op1,op2)) 
  33.                 # 彈出下一個棧頂運算符 
  34.                 top = operator_stack.pop() 
  35.         # 碰到運算符,就要把棧頂優先級不低于它的都彈出求值 
  36.         elif token in '+-*/'
  37.             while operator_stack and pre_dict[operator_stack[-1]] >= pre_dict[token]: 
  38.                 top = operator_stack.pop() 
  39.                 op2 = operand_stack.pop() 
  40.                 op1 = operand_stack.pop() 
  41.                 operand_stack.append(get_value(top,op1,op2)) 
  42.             # 別忘了最后讓當前運算符進棧 
  43.             operator_stack.append(token) 
  44.     # 表達式遍歷完成后,棧里剩下的操作符也都要求值    
  45.     while operator_stack: 
  46.         top = operator_stack.pop() 
  47.         op2 = operand_stack.pop() 
  48.         op1 = operand_stack.pop() 
  49.         operand_stack.append(get_value(top,op1,op2)) 
  50.     # 最后棧里只剩下一個數字,這個數字就是整個表達式最終的結果 
  51.     print(operand_stack) 
  52.     print(operator_stack) 
  53.     return operand_stack[0] 
  54.   
  55. def get_value(operator : str, op1 : int, op2 : int): 
  56.     '''這是四則運算函數 
  57.     :參數 operator:運算符 
  58.     :參數 op1:左邊的操作數 
  59.     :參數 op2:右邊的操作數 
  60.     ''
  61.     if operator == '+'
  62.         return op1 + op2 
  63.     elif operator == '-'
  64.         return op1 - op2 
  65.     elif operator == '*'
  66.         return op1 * op2 
  67.     elif operator == '/'
  68.         return op1 / op2 
  69.   
  70. # 用一個例子試試,得出了結果  17.0 
  71. print(infix_evaluator('9 + ( 3 - 1 * 2 ) * 3 + 10 / 2')) 
  72.  
  73. 17.0 

上述程序只是使用四則運算表達式進行學習計算,但是輸入需要加空格進行分隔,比如9 + ( 3 - 1 * 2 ) * 3 + 10 / 2分隔為['9', '+', '(', '3', '-', '1', '*', '2', ')', '*', '3', '+', '10', '/', '2']。

后來嘗將9+(3-1*2)*3+10/2分隔為['9', '+', '(', '3', '-', '1', '*', '2', ')', '*', '3', '+', '10', '/', '2']。

后來想到了正則表達式1-9]\d*|[\+\-\*\/\(\)]。

  1. import re 
  2. s = '9+(3-1*2)*3+10/2' 
  3. print(re.findall('[1-9]\d*|[\+\-\*\/\(\)]',s)) 
  4.  
  5. ['9''+''(''3''-''1''*''2'')''*''3''+''10''/''2'

因此利用棧實現中綴表達式求值中等偏難算法題基本完成。

本文已收錄 GitHub: https://github.com/MaoliRUNsen/runsenlearnpy100

 

責任編輯:姜華 來源: Python之王
相關推薦

2023-12-13 10:12:40

Python函數lambda

2019-04-16 13:30:05

表達式求值數據結構算法

2020-12-21 08:22:36

前綴后綴中綴

2009-07-21 14:03:00

Scalaif表達式while循環

2009-12-17 10:39:01

Ruby數學表達式

2009-09-16 16:22:04

正則表達式匹配

2009-06-15 17:24:59

Groovy正則表達式

2024-03-25 13:46:12

C#Lambda編程

2014-04-04 11:14:18

JavaScriptStack遞歸

2009-09-16 13:24:30

PHP正則表達式匹配

2024-10-10 14:43:54

LambdaSpring編程

2024-03-12 08:23:54

JavaLambda函數式編程

2018-09-27 15:25:08

正則表達式前端

2022-11-24 06:33:43

表達式求值運算

2012-05-08 13:29:01

VB

2009-09-16 18:08:14

正則表達式匹配單詞

2024-01-17 07:00:56

JIT 技術數據庫表達式求值

2011-05-30 16:11:46

Javascript

2012-07-18 09:45:32

Java 8ScalaLambda

2009-09-16 13:53:17

PHP正則表達式匹配
點贊
收藏

51CTO技術棧公眾號

玖玖爱视频在线| 99www免费人成精品| 91精品人妻一区二区三区| 女生影院久久| 国产精品二三区| 99在线看视频| 福利网址在线观看| 99精品网站| 亚洲国产天堂久久国产91| www.四虎成人| 18免费在线视频| 国产精品亚洲第一| 欧美一级电影在线| 内射毛片内射国产夫妻| 深夜福利一区| 欧美日韩在线视频一区| 在线免费观看成人| 日本亚洲欧美| 欧美国产乱视频| 国产精品视频一二三四区| 天堂av在线播放| 91精品麻豆| 天天综合网天天综合色| 亚洲一区精彩视频| 十九岁完整版在线观看好看云免费| 美腿丝袜亚洲综合| 亚洲人成在线电影| wwwxxxx在线观看| 素人一区二区三区| 精品久久久久久中文字幕一区奶水 | 日韩在线视频二区| 日本免费福利视频| 日本免费一区二区视频| 精品视频免费看| 国产91在线视频观看| 三级福利片在线观看| 国产精品美女一区二区| 久久综合中文色婷婷| 亚洲精品综合网| 国产一区二区三区免费在线观看| 国产精品久久久久久久久久久久久 | av污在线观看| 欧美7777| 日韩欧美主播在线| 午夜精品久久久久久久无码| 天堂成人av| 亚洲欧美激情在线| 宅男av一区二区三区| 波多野结衣在线影院| 久久综合九色综合97婷婷| 国产伦精品一区二区三区视频孕妇 | 亚洲精品中文字| www.色多多| 清纯唯美亚洲经典中文字幕| 精品国产91久久久久久久妲己| 一级片黄色免费| 免费网站免费进入在线| 国产亚洲欧洲997久久综合| 久久精品一二三区| 日本一区二区三区在线观看视频| 99精品欧美一区二区蜜桃免费| 国产精华一区二区三区| wwwxxx亚洲| 精品国产欧美日韩| 亚洲欧美日韩爽爽影院| 亚洲最大成人网站| 精品国产一区二区三区久久久蜜臀| 国产午夜精品麻豆| 少妇久久久久久久久久| 精品国产一区二区三区小蝌蚪| 亚洲免费视频一区二区| 亚洲av综合一区二区| 韩日一区二区三区| 日韩在线中文字幕| 欧美成人黄色网| 亚洲国产欧美国产综合一区| 性欧美长视频免费观看不卡| 天天操夜夜操视频| 日本欧美在线看| 成人在线播放av| 后进极品白嫩翘臀在线视频| 91麻豆精东视频| 亚洲成人第一| 手机在线免费av| 精品久久久一区| 国产精品视频中文字幕| 精品国产三区在线| 亚洲成年网站在线观看| aaaaa级少妇高潮大片免费看| 精品一区电影| 欧美激情视频一区| 91在线视频免费播放| 久99久精品视频免费观看| 97netav| 毛片免费在线播放| 亚洲精品国产精品乱码不99| 国模无码视频一区二区三区| 四虎影视国产精品| 亚洲国产精品成人av| 亚洲一二三精品| 韩国一区二区三区在线观看| 国产精品第3页| www.国产精品视频| 国产性天天综合网| 免费在线看黄色片| 91国拍精品国产粉嫩亚洲一区| 欧美成人在线直播| 一区二区三区在线观看免费视频| 欧美激情视频一区二区三区在线播放 | 国产视频一区在线观看一区免费| 国产狼人综合免费视频| 色一情一乱一乱一区91av| 欧美激情在线观看视频免费| 成人小视频在线观看免费| 欧美日韩精品一区二区三区视频| 欧美电影精品一区二区| а天堂中文在线资源| 99热免费精品| 99视频免费观看| av在线免费一区| 精品免费在线观看| 中文字幕在线视频一区二区| 成人高清电影网站| 欧美夫妻性生活视频| 在线观看中文字幕av| 26uuu精品一区二区| 日本wwwcom| 视频在线观看入口黄最新永久免费国产| 一本大道av伊人久久综合| 精人妻一区二区三区| 婷婷精品进入| 国产日韩专区在线| 成人影视在线播放| 色婷婷av一区二区| 色呦呦一区二区| 亚洲黄色视屏| 国产伦视频一区二区三区| 最新超碰在线| 91精品国产91久久久久久一区二区| 手机免费看av| 久久蜜桃精品| 蜜桃视频在线观看91| 午夜影视一区二区三区| 亚洲第一区在线观看| 欧美日韩国产精品综合| 国产经典欧美精品| 成人一区二区av| 日本精品视频| 欧美激情国产高清| 亚洲欧美强伦一区二区| 亚洲午夜三级在线| 国产综合内射日韩久| 在线看片一区| www.成人av.com| 丰满大乳少妇在线观看网站| 精品国产免费一区二区三区香蕉| 日韩a级片在线观看| 国产一区二三区好的| 欧美a级黄色大片| 日韩一级淫片| 国自产精品手机在线观看视频| 蜜桃av中文字幕| 欧美日韩国产精品一区二区不卡中文| 欧美成人三级伦在线观看| 国产精品老牛| 日本欧美精品久久久| 四虎精品在线观看| 欧美国产日韩xxxxx| 免费看日韩av| 日韩人在线观看| 国产三级aaa| 国产精品一二三四五| 老太脱裤子让老头玩xxxxx| 国产一级成人av| 国产福利成人在线| 老司机福利在线视频| 精品国产伦一区二区三区观看体验| 国产性生活网站| 久久久久久亚洲综合影院红桃| 亚洲成色www.777999| 69精品国产久热在线观看| 欧美极品少妇xxxxⅹ喷水| 视频一区二区三区国产| 欧美探花视频资源| 欧美日韩在线视频免费| 91一区二区在线| 天天视频天天爽| 狠狠综合久久av一区二区老牛| 久久精品99| 日韩有码欧美| 91av在线播放视频| 青青青青在线| 精品无人区乱码1区2区3区在线| 日韩久久久久久久久久| 亚洲一卡二卡三卡四卡| 性欧美13一14内谢| 国产成人亚洲综合a∨婷婷 | 爱草tv视频在线观看992| 亚洲欧美在线第一页| va婷婷在线免费观看| 日韩欧美在线国产| www.色小姐com| 中文字幕av在线一区二区三区| 少妇性l交大片7724com| 丝袜美腿亚洲一区| 成年在线观看视频| 成人激情开心网| 国产视频在线观看一区| 天天综合在线观看| 国产91色在线|| 美女航空一级毛片在线播放| 中文字幕成人精品久久不卡 | 波多野结衣在线一区| 免费一区二区三区在线观看| 亚洲少妇在线| 国产一区二区四区| 91精品综合| 日韩偷拍一区二区| 性欧美lx╳lx╳| 国产精品一区视频| 美女精品久久| 国产日韩专区在线| 91精品国产66| 国产成人精品视| 亚洲最大成人| 69视频在线播放| 男女羞羞视频在线观看| 日韩午夜在线视频| 国产在线中文字幕| 亚洲乱码国产乱码精品精| 俄罗斯嫩小性bbwbbw| 欧美一区二区三区思思人| 亚洲一卡二卡在线观看| 在线免费av一区| 国产寡妇亲子伦一区二区三区四区| 亚洲一本大道在线| 麻豆一区二区三区精品视频| 一区二区三区四区高清精品免费观看 | 17c精品麻豆一区二区免费| 欧美午夜激情影院| 国产欧美日本一区视频| 制服 丝袜 综合 日韩 欧美| 91在线播放网址| 精品黑人一区二区三区观看时间| 成人h动漫精品一区二| 激情小说欧美色图| 国产成人av电影| 中国男女全黄大片| 成人性视频网站| 日本一区二区在线观看视频| 成人综合婷婷国产精品久久| 免费啪视频在线观看| 国产精品1024| 欧美xxxx×黑人性爽| av电影天堂一区二区在线观看| v天堂中文在线| 91在线精品一区二区三区| 老牛影视av老牛影视av| 国产亚洲精品超碰| 久久精品日韩无码| 综合激情成人伊人| 久久久久久久黄色| 午夜影视日本亚洲欧洲精品| av资源免费观看| 欧美亚洲综合在线| 国产一区二区三区中文字幕| 91精品国产欧美日韩| 亚洲成a人片77777精品| 欧美精品一区二区三区视频| 日本v片在线免费观看| 一区二区三区 在线观看视| 欧美r级在线| 欧美激情一级二级| 中文字幕在线直播| 国产精品综合不卡av| 视频一区日韩| 奇米视频888战线精品播放| 99精品视频在线| 青青草成人免费在线视频| 久久一区亚洲| 国内av免费观看| 久久影音资源网| www欧美com| 福利二区91精品bt7086| 一级片免费观看视频| 精品福利在线导航| 国产h视频在线观看| 欧美成人免费播放| 久久sese| 99一区二区| 日韩在线观看| 日韩国产欧美亚洲| 精品在线播放免费| 成人无码www在线看免费| 国产精品久久三区| 日本道在线观看| 91麻豆精品国产91久久久久久| 亚洲av无码片一区二区三区| 一二美女精品欧洲| 成年网站在线视频网站| 国产精品久久一| 欧美成人午夜77777| 国产91av视频在线观看| 先锋a资源在线看亚洲| 91网址在线观看精品| 久久久美女毛片| 久久久久久久久精| 欧美日韩国产大片| 欧美美女色图| 久久久久久久久国产精品| 欧洲精品久久久久毛片完整版| 精品在线一区| 国内自拍一区| av噜噜在线观看| 欧美激情一区二区三区四区| 日韩手机在线观看| 欧美一二三区在线观看| 色开心亚洲综合| 日本一区二区三区四区视频| 成人爽a毛片| 日本一区二区三区四区五区六区| 日韩有码一区二区三区| 日本黄色录像片| 亚洲国产成人91porn| 国产人妻精品一区二区三| 中文字幕欧美视频在线| 大胆人体一区| 久久精品magnetxturnbtih| 狠狠色丁香久久综合频道| 色婷婷一区二区三区在线观看| 国产精品毛片a∨一区二区三区| 久久久蜜桃一区二区| 日韩精品丝袜在线| h片在线观看视频免费| 国产成人女人毛片视频在线| 亚洲欧美色图| 又色又爽又黄视频| 国产精品进线69影院| 伊人色综合久久久| 中文字幕9999| 日韩毛片网站| 中文字幕在线观看一区二区三区| 日本成人超碰在线观看| 精品一区二区6| 在线国产亚洲欧美| av在线三区| 国产在线观看91精品一区| 日韩精品网站| 拔插拔插华人永久免费| 日韩一区在线看| av中文字幕免费| 欧美日韩高清区| 福利电影一区| 女性女同性aⅴ免费观女性恋| 91视频免费看| 五月激情丁香网| 日韩中文字幕免费看| 国产美女视频一区二区| 欧美性猛交内射兽交老熟妇| 国产传媒久久文化传媒| 国产对白videos麻豆高潮| 亚洲国产欧美精品| 日韩欧美看国产| 一区二区三区欧美在线| 国产一区在线观看麻豆| 国产小视频在线看| 亚洲男人7777| 男人天堂久久| 国产一级做a爰片久久毛片男| 99天天综合性| 亚洲毛片一区二区三区| 精品国偷自产在线视频| 一区二区三区自拍视频| 亚洲国产精品久久久久婷蜜芽| 国产拍欧美日韩视频二区| 国产精品热久久| 午夜精品免费视频| 精品视频免费| 麻豆tv在线观看| 色婷婷综合久久久久中文 | 亚洲91精品在线| 欧美先锋资源| 欧美一级片在线免费观看| 色婷婷综合久久久久中文 | 亚洲成va人在线观看| 九色在线播放| 91视频在线免费观看| 免费在线播放第一区高清av| 999精品视频在线观看播放| 精品国产自在久精品国产| 国精产品一区一区三区四川| 色婷婷777777仙踪林| www久久精品| 精品国产伦一区二区三| 国产a∨精品一区二区三区不卡| 91精品国产乱码久久久久久| 国产又爽又黄无码无遮挡在线观看| 欧美日韩二区三区| 伊人网在线播放| 国产a级黄色大片|