Stack 자료구조 다루기
July 24th, 2020
🧵 스택(Stack)의 정의
스택은 한쪽 끝에서만 데이터를 넣고 뺄 수 있기 때문에 LIFO(Last-In, First-Out), 즉 후입선출 형식을 가진 자료구조이다.
🎨 스택의 ADT
- push(data): 스택의 가장 윗부분에 데이터를 추가한다.
- pop(): 스택에서 가장 위에 있는 데이터를 제거한다. (삭제된 데이터 반환)
- peek(): 스택의 가장 위에 있는 데이터를 반환한다. (삭제 X)
- isEmpty(): 스택이 빈 경우 true, 그렇지 않은 경우 false를 반환한다.
🧪 스택의 활용 예시
- 웹 브라우저의 뒤로가기(back)
- 실행 취소(undo)
- 후위 표기법(postfix)
💻 스택의 구현
스택은 배열, 객체을 통해서도 구현도 가능하고, 연결 리스트를 통해서도 구현이 가능하다. 여기서는 배열, 객체를 통해 다루는 것만 해볼 것이다.
배열을 통한 구현
class Stack {
constructor() {
this.storage = [];
this.topIndex = -1;
}
isEmpty(){
return this.topIndex === -1 ? true : false
}
push(data) {
this.topIndex += 1;
this.storage[this.topIndex] = data;
}
pop() {
if(this.isEmpty()) {
console.log('Empty!');
return;
}
const result = this.storage[this.topIndex];
this.storage = this.storage.slice(0, this.topIndex);
this.topIndex -= 1;
return result;
}
peek() {
if(this.isEmpty()){
console.log('Empty!');
return;
}
return this.storage[this.topIndex];
}
}
객체를 통한 구현
class Stack {
constructor() {
this.storage = {};
this.top = -1;
}
isEmpty() {
return this.top === -1 ? true : false;
}
push(data) {
this.top += 1;
this.storage[this.top] = element;
}
pop() {
if (this.isEmpty()) {
console.log('Empty!');
return;
}
const result = this.storage[this.top];
delete this.storage[this.top];
this.top -= 1;
return result;
}
}
🔍 Reference
- 윤성우의 열혈 자료구조 (저자: 윤성우)