スタック、キュー、インデックス


スタック


  • 「後入先出」(Last In First Out,LIFO)形式のデータ構造


  • スタックのサイズを超えるとオーバーフローし、データがない場合はデータがポップアップされてアクセスされるためunderflowが発生するため、実装時に例外処理が必要です.
  • キュー

  • データ構造
  • 先着後着の特性、並んで待つ時先着後着の道理
  • インデックス(Deque)

  • Deque ( Double Ended Queue )
  • スタックとキューとは異なり、両方のデータ構造を挿入および削除できます.
  • Pythonでの使用

  • スタック
  • '''
    파이썬에서는 list를 이용하여 쉽게 스택을 구현 할 수 있으며
    실제 사용시에는 collections에 구현되어 있는 deque를 이용하면 더 빠름
    
    from collections import deque
    dq = deque()
    
    # 스택으로 사용시
    dq.append() # 가장 오른쪽에 추가
    dq.pop() # 가장 오른쪽 원소 삭제 및 반환
    
    # 큐로 사용시
    dq.append() # 가장 오른쪽에 추가
    dq.popleft() # 가장 왼쪽 원소 삭제 및 반환
    '''
    
    stack = []
    stack.append(1) # push
    stack.append(2)
    stack.pop() # pop, 2
    stack[-1] # top, 1
    len(stack) # size, 1
  • キュー
  • '''
    stack과 마찬가지로 파이썬에서는 list를 이용하여 쉽게 구현 할 수 있다.
    하지만 이 또한 deque를 사용하는 것이 빠르고 쉽다.
    from collections import deque
    dq = deque()
    
    # 스택으로 사용시
    dq.append() # 가장 오른쪽에 추가
    dq.pop() # 가장 오른쪽 원소 삭제 및 반환
    
    # 큐로 사용시
    dq.append() # 가장 오른쪽에 추가
    dq.popleft() # 가장 왼쪽 원소 삭제 및 반환
    '''
    queue = []
    queue.append(1) # 가장 오른쪽에 원소 추가 push
    queue.append(2) # 가장 오른쪽에 원소 추가 push
    queue.pop(0)    # 가장 왼쪽 원소 삭제 및 반환, pop, 1
    len(queue)      # size 및 empty 판단
    queue[0]        # 제일 앞의 원소를 읽기, getFront
    queue[-1]       # 제일 마지막의 원소를 읽기, getBack
  • インデックス
  • # python에서는 collections의 deque를 사용하면 된다
    from collections import deque
    dq = deque()
    
    dq.append(x) # 오른쪽(끝)에 삽입
    dq.appendleft(x) # 왼쪽(앞)에 삽입
    dq.extend(iterable) # iterable arguments를 오른쪽(끝)에 삽입
    dq.extendleft(iterable) # iterable arguments를 왼쪽(앞)에 삽입.
    # 'de'를 삽입하면, 'e','d' 순서로 삽입된다
    dq.pop() # 오른쪽(끝)에서 제거와 반환
    dq.popleft() # 왼쪽(앞)에서 제거와 반환
    dq.rotate(n) # n번만큼 elements를 이동시켜주는 method. 양수면 오른쪽으로, 음수면 왼쪽으로 rotate

    Reference

  • https://justicehui.github.io/easy-algorithm/2018/06/03/Stack/
  • https://justicehui.github.io/easy-algorithm/2018/06/09/Queue/
  • https://justicehui.github.io/easy-algorithm/2018/06/12/Deque/