国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python實現(xiàn)一個棧判斷括號是否平衡

2020-02-15 22:48:23
字體:
供稿:網(wǎng)友

棧(Stack)在計算機領(lǐng)域是一個被廣泛應(yīng)用的集合,棧是線性集合,訪問都嚴格地限制在一段,叫做頂(top)。 舉個例子,棧就想一摞洗干凈的盤子,你每次取一個新盤子,都是放在這一摞盤子的最上頭,當你往里面添加盤子的時候,也是放在最上面,處在底部的盤子,你可能永遠也用不到。 棧的最常見操作,有如下兩個:

push(a) # 壓入,將a壓入的棧中pop() # 彈出,將棧的最后一個元素彈出

可是使用Python的列表數(shù)據(jù)結(jié)構(gòu),來模擬棧的操作,使用 append 來模擬 push ,使用列表的 pop 來模擬棧的 pop ,但是這樣做有一個弊端,那就是列表原本自帶的操作方法同樣能夠使用,可能會造成混亂。

棧的實現(xiàn) 下面就通過借助Python的列表,來自定義一個棧類:

class Stack(object):  """使用數(shù)組實現(xiàn)一個棧"""  def __init__(self):    self.data = []  def push(self, num):    """壓棧操作"""    self.data.append(num)  def pop(self):    """返回從棧中彈出的元素, 當棧為空的時候, 拋出IndexError"""    return self.data.pop()  def peek(self):    """查看當前棧頂?shù)脑? 當棧為空的時候, 拋出IndexError"""    return self.data[-1]  def __len__(self):    """返回棧的長度, 調(diào)用len(obj)時會自動調(diào)用obj對象的__len__方法"""    return len(self.data)  def isEmpty(self):    """判斷棧是否為空"""    return True if len(self.data)==0 else False  def clear(self):    """清空棧"""    self.data = []  def __repr__(self):    """當前對象的表現(xiàn)形式, 在終點直接鍵入對象時會調(diào)用"""    return 'Stack_' + str(self.data)  def __str__(self):    """當前對象的字符串表示, 使用print(obj)時會調(diào)用"""    return 'Stack_' + str(self.data)

以上代碼實現(xiàn)了一個簡單的基于列表的棧。

棧的應(yīng)用 棧應(yīng)用的一個很典型的例子,就是檢查括號是否匹配。 例如: 每一個開始的 [ 后面,都應(yīng)該跟著一個位置正確的 ] ,并且每一個 ( 后面,也應(yīng)該跟著一個位置正確的結(jié)束的 ) .

(...)...(...)(...)...(...)...((...)def isBalance(text):  """棧的應(yīng)用,檢查括號是否平衡"""  result_stack = Stack()  for i in text:    if i in ['{', '[', '(']:      result_stack.push(i)    elif i in ['}', ']', ')']:      # 遇到結(jié)束括號的情況      if result_stack.isEmpty():        # 如果當前棧為空, 不匹配,返回False        return False      chFromStack = result_stack.pop()      if not ((chFromStack == '{' and i == '}' )          or (chFromStack == '[' and i == ']')          or (chFromStack == '(' and i == ')')):        # 如果不滿足匹配條件, 則返回False        return False  # 遍歷結(jié)束后, 如果結(jié)果棧為空, 則代表括號匹配, 棧不為空, 括號不匹配  return result_stack.isEmpty()

補充:Python中的棧

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄梅县| 英超| 荆门市| 六安市| 永春县| 台中市| 巩义市| 灌云县| 南皮县| 蓬溪县| 曲阳县| 巧家县| 安阳县| 崇礼县| 托克逊县| 五华县| 五家渠市| 明光市| 德保县| 永善县| 慈溪市| 珲春市| 灵璧县| 靖边县| 宜昌市| 林甸县| 广南县| 大石桥市| 张家港市| 黑山县| 佛山市| 阳原县| 和顺县| 舞阳县| 从江县| 宣汉县| 广宁县| 金寨县| 楚雄市| 崇信县| 惠安县|