
Stack example in real life!
프링글스를 예로 들어보자. 사진으로 본다면 이해가 더 쉽다
프링글스를 먹을때 통 중간에 구멍을 내서 프링글스를 먹는 사람은 없을 것이다.
스택은 Last In First Out (LIFO) 라고 가장 마지막에 들어온 값이 가장 먼저 나가는 것을 뜻한다
사진 출처: HolyCoders

Queue real life example
큐는 스택과 달리 First In First Out(FIFO) 가장 먼저 저장된 자료가 가장 먼저 나간다.
매점이나 카페에서 줄을 서게 되면 가장 먼저 온 사람이 주문을 할수 있게 되는 것 처럼 말이이다.
enqueue: 자료를 큐의 맨뒤에 추가한다 pop()의 개념
dequeue: 맨앞에 있는 자료를 제거한다 shift()의 개념
size: 큐의 사이즈를 알려준다
사진 출처: GreekforGreeks
인큐를 하면 앞에 요소가 추가 되기 때문에 rear의 사이즈도 ++ 해주어야 한다.
스택과 큐는 데이터가 서로 관계성을 가지고 있지는 않다.
하지만 연결 리스트는 각각의 데이터들이 서로 연결되어 있는 것을 의미한다.
사진 출처: GreekforGreeks
연결 리스트는 아래 세가지를 프로퍼티를 포함한다
head: 연결 리스트에서 가장 앞에 있는 노드
next: 다음 노드를 가르키는 화살표 (edge)
tail: 연결 리스트에서 가장 뒤에 있는 마지막 노드
여기서 흥미로운 점은 head와 head의 next노드의 연결을 끊으면 garbage collector가 메모리를 해제시키고 모든 남은 노드를 쓰레기통에 버려버린다
객체의 형태를 떠올리면 좋다.
해시 테이블에 들어가는 값은 키 + 벨류로 묶여있다.
객체도 key+ value의 프로퍼티를 가지고 있다
하지만 객체와 다른 점이 있다. 하나의 값에 하나의 키만 저장할 수 있다는 것이다.
사진 출처: Tutorialspoint
하나의 키에 하나의 값만이 들어올수 있기 때문에 한개이상의 값이 들어오게 되면 해시 충돌이 일어날수 있다.
이를 처리하기 위해서는 bucket 에 값을 담아주는 방법이 있다.