[algorithm] 스택
스택이란?
후입선출, 나중에 들어온 것을 가장 먼저 사용하는 자료구조.
스택은 마지막 항목이 제거된다는 것을 이용하면 찾기와 삽입이 O(1)에 이루어지는 매우 빠른 자료구조이다.
다음 코드는 스택의 기본 뼈대 구성이다.
function Stack(array){
this.array = [];
if(array) this.array = array;
}
Stack.prototype.getBuffer = function(){
return this.array.slice();
}
Stack.prototype.isEmpty = function(){
return this.array.length == 0;
}
var stack1 = new Stack();
console.log(stack1) // {array: []}
들여다보기(peeking)
스택의 마지막에 있는 데이터를 제거하지 않고 반환하는 것이 peeking이다.
Stack.prototype.peek = function(){
return this.array[this.array.length-1];
}
peeking을 통해서 데이터를 제거해야 할지 말아야 할지 결정할 때 사용할 수 있다. 시간복잡도는 O(1)이다.
삽입(push)
스택의 최상단에 데이터를 추가하는 것이 삽입이다.
Stack.prototype.push = function(value):void{
this.array.push(value);
}
삭제(pop)
스택의 최상단에 데이터를 추가하는 것이 삽입이다.
Stack.prototype.pop = function(value):void{
this.array.pop(value);
}
접근
위에서부터 n번째 노드에 접근하기 위해서는 pop을 n번 사용해야 한다.
function stackAccessNthTopNode(stack, n){
var bufferArray = stack.getBuffer();
if(n<=0) throw 'error';
var bufferStack = new Stack(bufferArray);
while(--n!==0){
bufferStack.pop();
}
return bufferStack.pop();
}
n번 반복하여 반환하므로 시간 복잡도는 O(n)이다.
검색
스택에서 pop이 버퍼 스택에 대해 호출할 수 있도록 버퍼 스택을 만들어 원본 스택은 건드리지 않아야 한다.
function stackSearch(stack, element) {
var bufferArray = stack.getBuffer();
var bufferStack = new Stack(bufferArray); // 버퍼스택으로 복사한다.
while(!bufferStack.isEmpty()){
if(bufferStack.pop()==element) return true;
}
return false;
}
원하는 값을 찾아 true를 반환하기 전까지는 n번 반복해야 하므로 시간복잡도는 O(n)
Author And Source
이 문제에 관하여([algorithm] 스택), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minai/algorithm-스택저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)