javascript는 배열 내장 함수로 간단히 스택을 구현할 수 있지만 원리 이해를 위하여 사용하지 않고 구현하였다.
배열을 사용한 경우와 연결리스트를 사용한 경우를 구현해보았다.
배열 활용
'use strict';
class Stack {
constructor() {
this.storage = []; // 배열을 사용
this.top = 0;
}
pop() {
if (this.isEmpty()) {
console.log('스택이 비어 있습니다.');
return;
}
return this.storage[--this.top];
}
push(data) {
this.storage[this.top++] = data;
return;
}
peek() {
if (this.isEmpty()) {
console.log('스택이 비어 있습니다.');
return;
}
console.log(this.storage[this.top - 1]);
return;
}
isEmpty() {
return this.top === 0 ? true : false;
}
}
const stack = new Stack();
stack.push(1);
stack.peek();
stack.push(2);
stack.peek();
stack.push(3);
stack.peek();
stack.pop();
stack.peek();
stack.pop();
stack.peek();
stack.pop();
stack.peek();
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class Stack {
constructor() {
this.top = null;
this.size = 0;
}
push(value) {
const newNode = new Node(value);
newNode.next = this.top;
this.top = newNode;
this.size++;
return;
}
pop() {
const popNode = this.top;
if(this.size === 1) {
this.top = null;
} else {
this.top = popNode.next;
}
this.size--;
return popNode.value;
}
peek() {
return this.top.value;
}
size() {
return this.size;
}
}
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop());
stack.push(4);
console.log(stack.pop());
console.log(stack.pop());