- 基本的な定義
:スタックとは何ですかスタックのデータ項目の順序のセットがありますが。スタックにおいて、追加、除去アイテムが、同じ端部で発生され、呼び出しスタックのこの端部(トップ)、スタックの他端は、何も動作は、底部(ベース)と呼ばれていません。
特徴: LIFO、最後のアウト
- スタックの基本的な操作
私たちは、Pythonにはスタックがないことを知っている必要がありますが、我々は、スタックをシミュレートすることができます。
まず、我々が定義する必要があるスタックの基本的な操作のいくつか:
スタック() | 空のスタックを作成し、それがどのデータ項目が含まれていません |
プッシュ(アイテム) | アイテムは、戻り値、スタックに追加しません |
ポップ() | スタックデータ項目の上部を除去し、返され、スタックが変更されています |
ピーク() | ビュースタックのデータ項目、スタックの先頭を削除せずに帰り項目、およびスタックを変更しません |
isEmpty() | スタックが空であるかどうかを返します |
サイズ() | データ数のリターンスタック |
ここでは、操作の種類のリストとスタックを実装することができます。
1 クラススタック: 2 「」「 3 スタックの独自の定義 4 スタックは後端で、後端は、スタックの最上位に設定されてもよい 5。 」「」 6。 DEF __init__ (自己): 7 self.items = [] 8。 DEF isEmpty(自己): 9 リターン self.items == [] 10 DEFのプッシュ(セルフ、項目) 。11 self.items.append(項目) 12である DEF POP(自己): 13である (self.items.pop) 14 DEF PEEK (自己): 15 戻り self.items [lenは(self.items)-1 ] 16 デフサイズ(自己): 17 リターンでlen(self.items) 18 なら __name__ == ' __main__ ' : 19個の S = スタック() 20 s.push(' 1 ' ) 21 s.push(' ' ) 22 プリント(s.isEmpty()) 23 プリント(s.peek()) 24 プリント(s.size())
1 [OUT]: 2つの 偽 3つの 4 2 5 6プロセスは終了コード0で終了します
- アプリケーションのスタック
- 単純なマッチングブラケット
タスク:ブラケットはマッチングアルゴリズムを構築し、対応する左右の括弧に一致します。左から右にスキャンブラケットに、最新のオープン左括弧、右括弧が最初の出会いと一致する必要があります
フローチャート:
コード:
1 からスタックインポートスタック 2 DEF parChecker(symbolString): 3つの S = スタック() 4 バランス= 真 5 、インデックス= 0 6 ながらインデックス<LEN(symbolString)とバランス: 7 シンボル= symbolString [インデックス] 8 かのシンボル== " (" : 9 s.push(シンボル) 10 他: 11 であれば(s.isEmpty): 12 バランス=偽 13 他: 14 s.pop() 15 インデックス=指数+ 1 16 場合バランス及びs.isEmpty(): 17 リターン真 18 他: 19 リターン偽 20 プリント(parChecker(' ((()))))' )) 21 プリント(parChecker(' (((())))'))
[OUT]:
1つの 偽 2つの 真 3つの 4プロセスは、終了コード0で終了します
しかし、実際には、ブラケットは、] [()} {として、しばしばより複雑です
参考:https://www.bilibili.com/video/BV1QJ411w7bB?p=17