両端キュー 。以下のようなメソッドを持つ。 append # O(1) appendleft # O(1) pop # O(1) popleft # O(1) extend extendleft rotate(n) defaultdict dictのサブクラス。collections.Counterを使わずにカウンタを作るときに便利。
最近データ構造を自作するのにはまってるのでdequeをいろんなやり方で実装してみた。 実装の簡潔さを優先したから定数倍とかメモリとかなんも考えてない。 スタック2本 popleft()用とpop()用のスタックを用意する。どちらかが空になったら半分ずつに分ける。