Stack自作する
Stackを自作した。
もちろんいままで組み込みの構造を使ったことはあるし、理屈も知っている。
しかしちゃんと自分で書いたことがないのはダメなので書いてみた。
自作したStack
クラスとしてはこんな感じ。
pop()とpush()でstack[]に要素を格納/取り出ししていく感じ。
is_full()とis_null()で異常系の処理ができる仕様にする。
# --- coding: utf-8 --- import sys class Stack(): def __init__(self): self.stack = [] self.top = -1 self.MAX = 100 def push(self, x): """ このメソッドが呼ばれた時点でMAX以上積まれていたら、 self.is_full()でexitする。 """ if self.is_full(): print("This stack is full!!") sys.exit() self.stack.append(x) self.top += 1 def pop(self): """ このメソッドが呼ばれた時点でtopが-1なら、 self.is_null()でexitする。 """ if self.is_null(): print("This stack is null!!") sys.exit() tmp = self.stack[self.top] del(self.stack[self.top]) self.top -= 1 return tmp def is_null(self): if self.top < 0: return True else: return False def is_full(self): if self.top +1 >= self.MAX: return True else: return False
動作確認
①正常系
if __name__ == '__main__': stack = Stack() stack.push("1") stack.push("1") print(stack.pop())
ちゃんと1が表示される。
②is_full()を呼んでexitさせる異常系
if __name__ == '__main__': stack = Stack() for i in range(101): stack.push("1")
This stack is full!!が表示される。
③is_null()を呼んでexitさせる異常系
if __name__ == '__main__': stack = Stack() stack.push("1") print(stack.pop()) print(stack.pop())
This stack is null!!が表示される。
感想
マイstackが書けた。うれしい。
ほかのデータ構造にもガシガシチャレンジしていきたい。