スタック

スタックの実装です。 スタックのデータ構造はLIFO(後入れ先出し)です。

スタックは以下の操作ができます。

  • pop: スタックの一番上のデータを削除する
  • push: スタックの一番上にデータを追加する
  • peek: スタックの一番上の要素を返す
  • isEmpty: スタックが空か判定する

実装

class Stack():
    """
    Stack全体
    """
    class StackNode():
        """
        Nodeクラス
        """
        def __init__(self, data):
            self.data = data
            self.next = None

    def __init__(self):
        self.top = None

    def pop(self):
        """
        スタックからtopを取り出す
        """
        top = self.top
        assert top != None, "topが空になっている!"
        item = top.data
        self.top = top.next
        return item

    def push(self, item):
        """
        スタックにitem追加
        """
        t = self.StackNode(item)
        t.next = self.top
        self.top = t

    def peek(self):
        """
        スタックのtopの値を返す
        """
        assert self.top != None, "topが空になっている"
        return self.top.data

    def isEmpty(self):
        """
        スタックがからか判定する
        """
        return self.top == None

実行すると

if __name__ == "__main__":
    S = Stack()
    for i in range(5):
        S.push(i)

    while not S.isEmpty():
        print(S.pop())
$ python stack.py
4
3
2
1
0