스택 구현해보기

Lainlnya·2022년 9월 26일
0

알고리즘

목록 보기
6/25

스택이란?

나중에 넣은 데이터가 먼저 나오는 LIFO(Last In First Out) 기반의 선형 자료 구조
stack구조

구현 메서드

  • 데이터 전체 획득 / 비어있는지 확인: Stack.getBuffer(), Stack.isEmpty()
  • 추가 / 삭제 / 마지막 데이터 조회 / 크기 확인: Stack.push(), Stack.pop(), Stack.peak(), Stack.size()
  • 데이터 위치 / 존재여부 확인: Stack.indexOf(), Stack.includes()

1. stack 생성

function Stack(array) {
    this.array = array ? array : [];
}

2. 객체 내 데이터 셋 반환 (Stack.getBuffer())

Stack.prototype.getBuffer = function() {
    // slice: 어떤 배열의 시작부터 끝까지 얕은 복사본을 새로운 객체로 반환한다.
    return this.array.slice();
}

3. 객체 내 데이터의 존재 여부 (Stack.isEmpty())

Stack.prototype.isEmpty = function() {
    return this.array.length === 0;
}

4. 데이터를 추가 (Stack.push())

array에 내장되어 있는 메서드를 사용해서 구현했다.

Stack.prototype.push = function(element) {
    return this.array.push(element);
}

5. 데이터를 삭제 (Stack.pop())

array에 내장되어 있는 메서드를 사용해서 구현했다.

Stack.prototype.pop = function() {
    return this.array.pop();
}

6. 가장 끝 데이터를 반환 (Stack.peek())

array의 가장 마지막 데이터이기 때문에, length - 1의 값을 반환한다.

Stack.prototype.peek = function() {
    return this.array[this.array.length - 1];
}

7. 스택 내 데이터의 개수를 확인 (Stack.size())

Stack.prototype.size = function() {
    return this.array.length;
}

8. 데이터의 위치 값 조회 (Stack.indexOf())

position값을 정해줬을 경우, position부터 찾고자 하는 데이터를 찾으며, 그렇지 않을 경우 처음부터 데이터를 찾는다.

찾는 값이 없을 경우 -1을 리턴한다.

Stack.prototype.indexOf = function(element, position = 0) {
for (let i = position; i < this.array.length; i++) {
        if (element === this.array[i]) return i;
    }
    return -1;
}

9. 데이터의 존재 여부 확인 (Stack.includes())

위의 indexOf와 똑같지만, 존재 여부에 대해 true/false의 리턴값이 다르다.

리턴값이 boolean이다.

Stack.prototype.includes = function(element, position = 0) {
    for (let i = position; i < this.array.length; i++) {
        if (element === this.array[i]) return true;
    }
    return false;
}

관련 전체 코드는 Git에 업로드 해두었습니다.
Github_Stack

profile
Growing up

0개의 댓글