スタック - 後入れ先出し(LIFO)順による検索をサポートするストレージコンテナです。スタックはおそらく、バッチ ジョブを処理する場合など、取得順序がまったく重要でない場合に使用するのに適したコンテナです。
たとえば、 カフェテリアで使用されるプレートのスタックを考えてみましょう。アクセスできるのは上部のプレートのみであるため、プレートがスタックから取り除かれる順序は追加された順序の逆になります。 .
スタックに対する INSERT 操作は PUSH と呼ばれることが多く、要素引数をとらない DELETE 操作は POP と呼ばれることがよくあります。
Push (x,s): 項目 x をスタック s の先頭に挿入します。
Pop(s) : スタック s の一番上の項目を返します (そして削除します)。
冷蔵庫に入れられた食品は、賞味期限があるにもかかわらず、通常同じように出てきます。アルゴリズム的には、再帰アルゴリズムの実行中に LIFO が発生する傾向があります。
スタックのアプリケーション -
配列を使用したスタックの実装 -
class Stack: def __init__(self): #Initializes an empty stack self.stack = [] def isEmpty(self) -> bool: #Returns True if the stack is empty, False otherwise. return len(self.stack) == 0 def push(self, item) -> None: #Pushes an item onto the stack. self.stack.append(item) def pop(self): #Removes and returns the top item from the stack. if self.isEmpty(): return None return self.stack.pop() def peek(self): #Returns the top item from the stack without removing it. if self.isEmpty(): return None return self.stack[-1]
Queue - 先入れ先出し (FIFO) 順序による取得をサポートするストレージ コンテナです。キューに対する INSERT 操作を ENQUEUE と呼び、DELETE 操作を DEQUEUE と呼びます。スタック操作 POP と同様に、DEQUEUE は要素引数を取りません。スタックとキューは、DELETE 操作によってセットから削除される要素が事前定義されている動的セットです。
Enqueue(x,q): 項目 x をキュー q の最後に挿入します。
Dequeue(q): キュー q から先頭の項目を返します (および削除します)。
キューには先頭と末尾があります。
要素がキューに入れられると、新しく到着した顧客が列の最後尾に配置されるのと同じように、その要素はキューの最後尾に配置されます。
キューから取り出される要素は、常にキューの先頭にある要素です。たとえば、列の先頭にいる最も長く待っている顧客などです。
キューのアプリケーション -
配列を使用したキューの実装-
class Stack: def __init__(self): #Initializes an empty stack self.stack = [] def isEmpty(self) -> bool: #Returns True if the stack is empty, False otherwise. return len(self.stack) == 0 def push(self, item) -> None: #Pushes an item onto the stack. self.stack.append(item) def pop(self): #Removes and returns the top item from the stack. if self.isEmpty(): return None return self.stack.pop() def peek(self): #Returns the top item from the stack without removing it. if self.isEmpty(): return None return self.stack[-1]
スタックを使用してキューを実装する -
class MyQueue: def __init__(self): # Store elements self.queue = [] # A pointer to indicate the start position self.p_start = 0 def enQueue(self, x): #Insert an element into the queue. self.queue.append(x) return True # Return True if the operation is successful def deQueue(self): #Delete an element from the queue. if self.isEmpty(): return False self.p_start += 1 return True #Return True if the operation is successful def Front(self): #Get the front item from the queue. if not self.isEmpty(): return self.queue[self.p_start] return None # Return None if the queue is empty def isEmpty(self): #Checks whether the queue is empty or not return self.p_start >= len(self.queue)
キューを使用したスタックの実装 -
class MyQueue: def __init__(self): self.stack_1 = [] # Main stack for enqueue operations self.stack_2 = [] # Temporary stack for dequeue operations self.front = None # Pushes element x to the back of the queue. def push(self, x): # Move all elements from stack1 to stack 2 to reverse their order while self.stack_1: self.stack_2.append(self.stack_1.pop()) self.stack_2.append(x) # Move all elements back from stack2 to stack 1 as a queue while self.stack_2: self.stack_1.append(self.stack_2.pop()) # Removes the element from the front of the queue and returns it def pop(self): return self.stack_1.pop() # Returns the element at the front of the queue def peek(self): return self.stack_1[-1] # Returns true if the queue is empty, false otherwise def empty(self): return not self.stack_1
以上がスタックとキュー ||パイソン ||データ構造とアルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。