코딩 기록/자바스크립트
(JavaScript) 자바스크립트 스택(Stack, LIFO) 자료구조 구현
kimyang-Sun
2021. 2. 8. 23:37
자바스크립트로 스택(Stack) 기능을 구현해봤습니다.
스택은 LIFO로 Last In First Out, 마지막으로 들어온 데이터가 처음으로 나가는 구조입니다.
// 스택 클래스
class Stack {
constructor() {
this._size = 0; // 현재 데이터 수
this.head; // Stack 기준 현재 값
this.tail; // Stack 기준 가장 마지막 값
}
// 묶여있는 _size를 밖에서 호출해주기 위해 getter를 사용합니다.
get size() {
return this._size;
}
// 스택 추가
push(value) {
const node = { value };
if (this._size === 0) {
this.head = node;
this.tail = node;
} else {
node.next = this.head;
this.head = node;
}
this._size++;
}
// 스택 제거
pop() {
if (!this.head) throw new Error('stack not exist..😑'); // 스택이 하나도 없는 상태면 에러 발생
if (this.head.value === this.tail.value) {
this.tail = undefined;
}
const next = this.head.next;
this.head = next;
this._size--;
}
// 스택 검색 = index
search(num) {
// 스택이 하나도 없거나 해당하는 스택이 없을 경우에 에러 발생
if (!this.head) {
throw new Error('stack not exist..😑');
} else if (num < 0 || num >= this._size) {
throw new Error('No corresponding stacks found..😣');
}
let count = this._size - 1;
let current = this.head;
while (num < count) {
current = current.next;
count--;
}
return current.value;
}
}
주요기능
- size : 현재 들어가있는 데이터의 수
- push : 입력된 데이터를 추가하는 함수
- pop : 데이터를 제거하는 함수
- search : 입력된 숫자에 해당하는 데이터를 반환하는 함수 (배열의 index와 같습니다)
마지막으로 콘솔로 테스트 해보겠습니다.
const stack = new Stack(); // 클래스 생성
console.log(stack); // 초기 데이터
// 데이터 추가
stack.push('google');
console.log(stack);
stack.push('samsung');
console.log(stack);
stack.push('lg');
console.log(stack);
// index 확인
console.log(stack.search(0), stack.search(1), stack.search(2));
// 데이터 제거
stack.pop();
console.log(stack);
stack.pop();
console.log(stack);
stack.pop();
console.log(stack);
밑에는 타입스크립트의 스택입니다.