Stack과 Queue는 실생활에서도 흔하게 볼 수 있는 형태의 자료구조다. 서로 비슷하면서 다른 두 자료구조는 많은 부분에서 활용 되므로 중요도가 높다고 한다!
두개의 정의만 봤을 때는 생각 보다 이해하기 쉬웠고 위의 그림을 보니 둘의 차이점과 성격은 확실하게 알 수 있었다.
하지만 막상 코드로 옮기려하니 실행되어야 할 순서가 머리속에서 꼬여버려서 생각이 많아 졌었다...
지금은 어느정도 이해한거 같으니 다시 정리해보면서 이해 해봐야겠다!
스택을 이해할때 프링글스를 생각하면 이해가 좀 더 쉬울 것 같다.
프링글스를 먹을때 제일 위에 있는 것 부터 꺼내 먹지 않나요? 만약 맨 아래 과자를 먼저 먹고 싶다고 해도 위의 과자 들을 먼저 꺼내야 맨 아래에 있는 과자를 먹을 수 있을 것 입니다!
스택도 이와 같은 구조입니다. LIFO(Last In First Out) 나중에 들어 간 것이 먼저 나온다는 뜻입니다! 프링글스와 같지 않나요?
포인터 = 0
1. push
1.1. storage[포인터] = 값을 넣어준다.
1.2. 포인터 + 1
2. pop
2.1. storage[포인터] 를 삭제한다.
2.2. 포인터 - 1
3. Size
3.1. 포인터 반환
아래와 같이 자바스크립트 코드로 구현했을 때 (원래 객체구조였는데 이해에 도움이 되도록 배열로 변경하였습니다!)
class Stack {
constructor() {
this.storage = [];
}
size() {
return this.storage.length
]
push(element) {
this.storage.push(element)
}
pop() {
let targetel = ''
targetel = this.storage[this.storage.length - 1]
if(this.storage.length > 0){ // '빈 스택에 pop 연산을 적용했을때 에러 방지
this.storage.pop()
}
return targetel
}
}
실행을 한다면
stack.push('a')
stack.push('b')
stack.push('c')
console.log(stack.storage) // ['a', 'b', 'c']
stack.pop() // 'c'
console.log(stack.storage) // ['a', 'b']
이와 같이 나중에 들어간 것이 먼저 나오는것을 알 수 있습니다.!!