Stack?


  • 리스트에서 제일 먼저 들어온 데이터가 제일 마지막으로 빠져 나가는 자료구죠 (FILO, First-In-Last-Out)

Big-O notaion ㄱㄱ


  • in case of Array
    • push? O(n)
    • pop? O(1)
    • peek? O(1)
  • in case of Linked List
    • push? O(1)
    • pop? O(1)
    • peek? O(1)

When using Stack?


  • call stack

    def a(): yeonjoo_is_love = 1 yeonjoo_is_love = b(yeonjoo_is_love) yeonjoo_is_love = str(yeonjoo_is_love)

    return yeonjoo_is_love
    

    // text section or code section

하지만 function exception일 때에는 stack을 강제종료 하고 나오게 됨

  • Balancing of symbols // brace if (yeon_joo is love) { foreach (yeon_joo as value) { print(True) } } // tage

Queue?


먼저 들어온 애가 제일 먼저 탈출하는 자료구조 (FIFO, First-In-First-Out)

다시 한번 Big O ㄱㄱㄱㄱ


  • in case of Array
    • enqueue? O(n) → copy cost
    • dequeue? O(n)
  • in case of Linked list (sigly linked list)
    • enqueue? O(1)
    • dequeue? O(n)

deque(Double-ended Queue)?


  • 앞 뒤 모두 insert, delete가 가능

    push_front(), pop_back() push_back(), pop_front

  • 중간에 있는 데이터의 처리를 하기 힘듦

when using deque?


thread를 처리하는 방식 중에 Work Stealing 방식은 deque를 사용한다. n개의 thread가 working 중이라고 생각해보자. 하나의 작업을 맡게된 thread는 pop_front()를 하며 작업을 진행한다. 다른 thread가 본인의 작업 할당량을 모두 처리하고 다른 thread의 작업을 가져와 처리할 때에는 pop_back()을 이용하여 처리한다. 그 이유는 본인 작업량을 처리할 때 순서대로 처리해야 조금 더 빨리 처리가 가능하다고 한다.(아마 caching과 관련있을 것으로 예상됨) 그래서 다른 thread의 일을 가져올 때에는 제일 뒤에 있는 작업을 훔쳐간다고 한다.

priority queue?


  • queue에 우선순위에 맞춰서 넣어주는 것
  • heap을 이용해 구현
  • heap node를 통하여 구현