#!- * -エンコーディング= UTF-8 - * - DoubleLinkedList 輸入DoubleLinkedList、ノード クラスFIFOCache(オブジェクト): デフ __init__ (自己、容量): self.capacity = 容量 self.size = 0 self.map = {} #マップのマッピングを意味:あなたが作成したことを示します以来、オブジェクトのちょうど束が、彼らはそれがエンドツーエンド属性 #リンクリストクラスを、リストはNodeクラスを管理するために使用され、それが困難です私は、キーマッピングリストに元祖の追加することを選んだので、一つのノードを探す #ノードをマッピングするための鍵でキーと値のペアを使用して、ノードはリスト管理が容易にそれを作る、(キー、値)を持つ 位にpythonでこれを配列ではない、と呼ばれるタプルは、D = {KEY1:値1、KEY2 :値2} キー値ペアに格納され self.list = DoubleLinkedList(self.capacity) DEF(自己、キー)GET: #のキャッシュ内の値ではない IFキーない でself.map: リターン -1 他: ノード = self.map.get(キー) リターンnode.value デフ入れ(自己、キー、値): もし self.capacity == 0: リターン IFキーで self.map: #バッファ内の既に場合 、ノード= self.map.get(キー) #の値にボタン self.list.remove(ノード) node.value = 値 self.list.append(ノード) 他: #キャッシュにない IF self.size == self.capacity: #キャッシュがいっぱいです ノード= self.list.pop() デルself.map [node.key] self.size - = 1つの ノード = ノード(キー、値) self.list.append(ノード) self.map [キー] =ノード#xにキー= xと値= Y:Yは、{=尾マップの形で添加される}元祖 self.size + = 1 DEF 印刷(セルフ): #キャッシュ内のデータを表示するには、テストが使用しています self.listを。印刷() もし __name__ == ' __main__ ' : キャッシュ = FIFOCache(2 ) cache.put( 1,1 ) キャッシュ。印刷() cache.put( 2,2 ) キャッシュ。プリント() プリント(cache.get(1 )) cache.put( 3,3 ) キャッシュ。プリント() プリント(cache.get(2 )) cache.put( 4,4 ) キャッシュ。プリント() プリント(cache.get(1))