size만큼만 add 가능
-> 꽉 차면 배열의 크기를 늘려서 원본 배열을 복사하고, 새 원소를 추가하자.
-> 배열의 앞쪽에 더이상 사용하지 않지만, 가비지 콜렉터가 수거하지 못하는 공간이 남는다.
-> 메모리 낭비가 일어나니 배열의 사이즈를 늘리지 말고, head를 0번지로 돌리자.(순환 배열)
순환 배열
head가 tail보다 앞에 있는지, 뒤에 있는지 경우의 수를 나눠서 생각
head < tail인 경우
출력 : tail부터 배열 끝까지 + 0부터 head 앞까지
삽입 : head == tail이 아닌 경우 arr[head] = data
삭제 : head == tail이 아닌 경우 return arr[tail++]
tail < head인 경우
출력 : tail부터 head 앞까지
삽입 : arr[head++] = data로 삽입 후, head가 배열 범위를 넘어갔으면 head를 0으로
Array 배열로 Stack 구현
순환 배열
head가 tail보다 앞에 있는지, 뒤에 있는지 경우의 수를 나눠서 생각
head < tail인 경우
출력 : tail부터 배열 끝까지 + 0부터 head 앞까지
삽입 : head == tail이 아닌 경우 arr[head] = data
삭제 : head == tail이 아닌 경우 return arr[tail++]
tail < head인 경우
출력 : tail부터 head 앞까지
삽입 : arr[head++] = data로 삽입 후, head가 배열 범위를 넘어갔으면 head를 0으로
삭제 : tail이 음수가 아니면 return arr[tail++]
Node로 Stack 구현 삽입