Stack & Queue
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를 통하여 구현