Python実装スタック

python-stack
スタック(スタック)定義の実装:一方の端でのみ挿入または削除を許可する線形テーブル。
上:挿入と削除を可能にする線形テーブルの終わり。
下:修正済み。挿入と削除が許可されていない端。
空のスタック:要素のない空のリスト。

これは、スタックとポップのプロセスを示すBaidu Baikeの写真です。
ここに画像の説明を挿入スタック内の元のデータが次のようになっていると仮定すると、スタックは後入れ先出し(LIFO、後入れ先出し)のデータ構造です。 (2,7,1)
この図は、8と2がスタックにプッシュされ(Push())
、(2,8,1)がポップされる(Pop())プロセスを示しています
スタックの基本操作:
IniStack():空のスタックを初期化します
isempty():空の
isfull():フル
Push():スタックがいっぱいでない場合はスタックにプッシュします
Pop():スタックがいっぱいでない場合空にしてからポップ
GetTop():スタックの最上位要素を取得します

シーケンシャルスタックの実装:

# 后进先出
class myStack():
    def __init__(self,size):
        self.size=size  #栈的大小
        self.stack=[]	#定义一个空栈
        self.top=-1		#指示栈的存储情况,初始为-1,表示空栈,每入栈一个元素,top增加1,每出栈一个元素,top减少1

    def push(self, x): # 入栈之前检查栈是否已满
        if self.isfull():
            print("stack is full")
            return False
        else:
            self.stack.append(x)
            self.top = self.top + 1
            return True

    def pop(self):# 出栈之前检查栈是否为空
        if self.isempty():
            print("stack is empty")
            return False
        else:
            self.top = self.top - 1
            self.stack.pop()
            return True
    def gettop(self):
        if self.top!=-1:
            return self.stack[self.top]
    def isfull(self):
        return self.top+1 == self.size
    def isempty(self):
        return self.top == '-1'
    def showStack(self):
        print(self.stack)


s=myStack(10)
for i in range(10):
    s.push(i)
s.showStack()
print(s.gettop())

s.push("100")
for i in range(6):
    s.pop()
s.showStack()


出力は次のとおりです。

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9
stack is full
[0, 1, 2, 3]

注意点:
1)スタックに入るとき:要素は最初にスタックにプッシュされ、topは1ずつインクリメントされます;ポップするとき:topは1ずつデクリメントされ、要素はスタックからポップされます
。2) topの初期値は-1で、スタックが空であることを示します。top+ 1 = = sizeは、フルスタック
ここに画像の説明を挿入共有スタックを意味します。

ここに画像の説明を挿入スタック下部の位置が比較的一定であるため、2つの連続するスタックは1次元空間を共有でき、2つのスタックのスタック下部はそれぞれ共有スペースの両端に設定され、2つのスタック上部は中央まで伸びます。共有スペースの。
2つのスタックの最上位ポインタはスタックの最上位要素を指します.top0 = -1の場合、スタック0は空、top1 = maxSizeの場合、スタック1は空、スタックは2つのスタックの最上位の場合にのみいっぱいになります隣接している:top1-top0 = = 1
スタックに入ると、top0は1ずつインクリメントされてから割り当てられ、top1は1ずつデクリメントされてから割り当てられます。
共有スタックを定義します。

class myStack():
    def __init__(self,maxSize):
        self.stack0=[]	
        self.stack1=[]
        self.top0=-1
        self.top1=maxSize

他の方法は、シーケンシャルスタックと比較できます。
チェーンスタック:
チェーンストレージ構造のスタック。ノードの挿入と削除を容易にするスタックオーバーフローはありません。通常、単一リンクリストを使用して実装され、すべての操作はの先頭で実行されることが規定されています。テーブル。
次の図のチェーンスタックにはヘッドノードがなく、Lheadはスタックの最上位要素を指しています。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/liulanba/article/details/113702242