
선형 자료구조의 일종으로 LIFO(Last In Last Out, 후입선출)의 방식을 가지고 있다.

스택에 계속 데이터를 넣어야 할 때, 스택에 데이터를 저장할 수 있는 공간이 모두 차서 더이상 데이터를 넣을 수 없는 경우가 생긴다.
이런 경우에 2가지의 방법으로 해결할 수 있다.
1. 동적 배열 스택
push 함수를 수정하여 스택이 모두 찬 경우에 스택의 크기를 2배만큼 늘려주는 방법이다.
public void push(Object o) {
if(isFull(sp)) {
Object[] arr = new Object[MAX_SIZE * 2];
System.arraycopy(stack, 0, arr, 0, MAX_SIZE);
stack = arr;
MAX_SIZE *= 2; // 2배로 증가
}
stack[sp++] = o;
}
기존 스택의 2배 크기(MAX_SIZE * 2)의 임시 배열(arr)을 만들고 arraycopy를 통해 임시 배열에 기존 스택의 데이터를 복사한다.
그 후 arr의 참조값(주소)를 stack에 덮어씌우고 MAX_SIZE를 2배로 증가시킨다.
이런 방법을 사용하게 된다면, 스택이 모두 찬 경우에 자동으로 스택의 크기를 늘릴 수 있다.
2. 연결 리스트(Linked List)
스택 자체를 연결리스트 형태로 만드는 것이다. 그럼 데이터의 크기 제한이 사라진다.
하지만 연결리스트는 단점이 존재하기에 단점을 잘 인지하고 사용해야 한다.
Stack과 마찬가지로 선형 자료구조의 일종이지만 FIFO(Last In Last Out, 선입선출)의 방식을 가지고 있다.

front, 가장 나중에 들어간 데이터를 rear이라고 한다.rear 뒤에 넣고, 제거할 때에는 항상 front가 가리키는 데이터를 제거한다.큐를 계속 삽입(enQueue)하다 보면 rear == size - 1이 되는 경우가 있다. 하지만 front에서 삭제 연산을 하는 것 때문에 큐가 꽉 차있지 않은 경우가 있다. 이를 해결하기 위해 순차 큐, 원형 큐, 연결 리스트(Linked List) 방법을 사용할 수 있다.

rear == size - 1) 맨 앞으로 보내 다시 앞부터 데이터를 저장하여 원형으로 연결하는 방식이다.
참고
한재엽님 Github Interview_Question_for_Beginner
gyoogle님 Github tech-interview-for-developer
https://devuna.tistory.com/22
https://velog.io/@gillog/큐Queue