JavaScript의 스택 및 큐

19401 단어 javascript

대기열과 창고는 기술 면접에서 자주 사용하는 두 가지 데이터 구조다.그것들은 구조적으로 매우 비슷하기 때문에 구별하기가 좀 혼란스러울 수 있다.그래서 오늘 JavaScript를 사용하여 스택과 큐를 구성합니다.

쌓아올리다


창고는'후진선출'또는'후진선출'모델을 따르는 데이터 구조이다.우리는 그것들을 한 무더기의 책으로 상상할 수 있다.책더미 속의 세 번째 책을 되찾기 위해서 우리는 먼저 다섯 번째 책을 찾은 다음에 네 번째 책을 되찾아야 한다. 세 번째 책을 되찾을 때까지.
JavaScript는 네이티브 스택 데이터 구조를 제공하지 않으므로 배열, 클로즈업 또는 클래스를 사용하여 자체 데이터 구조를 구축해야 합니다.


이익.


창고는 일정한 시간에 항목을 추가하고 삭제할 수 있습니다.이것은 우리가 창고에 항목을 추가하거나 삭제할 필요가 없기 때문이다.

제약조건


불행하게도, 그룹과 달리, 창고는 창고의 n항에 대한 고정 시간 접근을 제공하지 않습니다.이것은 O (n) 가 필요할 수 있음을 의미하며, 그 중 n은 창고의 원소수이며, 한 항목을 검색하는 데 시간이 걸릴 수 있습니다.

메서드


스택은 다음과 같은 방법을 사용합니다.
  • pop(): 스택
  • 에서 상위 항목 제거
  • push(item): 스택 상단에 항목 추가
  • peek(): 스택 상단으로 돌아가는 항목
  • isEmpty(): 스택이 비어 있으면 true
  • 로 돌아갑니다.

    만들래요.


    우리들은 책꽂이를 하나 만들자. 그 안에는 우리가 가장 좋아하는 소설이 한 무더기 있다.창고의 장점은push와 pop 방법이 우리가 사용할 상응하는 그룹 방법과 동명이라는 데 있다.
    건조사
    클래스 BookStack을 정의하고 속성이 있는 구조 함수 방법을 제공합니다.
  • this.stack = [];
  • constructor() {
      this.stack = [];
    }
    
    얻다
    창고의 길이를 되돌려 주는 Getter를 추가할 것입니다.우리는 다른 방법에서 이 점을 사용할 것이다.
    get length() {
      return this.stack.length;
    }
    
    밀다
    우리는 array.push() 방법을 사용하기 위해 이 항목을 수조의 끝에 추가하기를 희망합니다.array.push() 방법은 새로운 길이의 그룹을 되돌려줍니다.
    push(item) {
      return this.stack.push(item);
    }
    
    팝송 팝송
    우리는 그룹의 마지막 항목을 삭제하려고 하기 때문에 array.pop() 방법을 사용할 수 있습니다.array.pop() 방법은 추가된 항목을 되돌려줍니다. 그룹이 비어 있으면 정의되지 않은 항목을 되돌려줍니다.
    pop() {
      return this.stack.pop();
    }
    
    훔쳐보다
    우리는 창고의 마지막 항목으로 돌아가거나 훔쳐보고 싶다.따라서 마지막 인덱스 값에 접근하기만 하면 됩니다.
    peek() {
      return this.stack[this.length - 1];
    }
    
    창고가 비다
    만약 창고에 항목이 없다면,true로 돌아가기를 희망합니다.따라서 길이가 0이면 true로 돌아갑니다.
    isEmpty() {
      return this.length === 0;
    }
    

    이 모든 것을 함께 놓아라


    최종 BookStack 코드는 다음과 같습니다.
    class BookStack {
      constructor() {
        this.stack = [];
      }
    
      push(item) {
        return this.stack.push(item);
      }
    
      pop() {
        return this.stack.pop();
      }
    
      peek() {
        return this.stack[this.length - 1];
      }
    
      get length() {
        return this.stack.length;
      }
    
      isEmpty() {
        return this.length === 0;
      }
    }
    
    너도 클립으로 그것을 만들 수 있다.
    function BookStack() {
      const stack = [];
    
      return {
        push(item) {
        return stack.push(item);
        },
    
        pop() {
            return stack.pop();
        },
    
        peek() {
            return stack[this.length - 1];
        },
    
        get length() {
        return stack.length;
        },
    
        isEmpty() {
        return this.length === 0;
        }
      }
    }
    
    우리 몇 권의 서적 데이터로 시험해 봅시다.
    let myBookStack = new BookStack();
    myBookStack.push('Oathbringer');
    myBookStack.push('The Stand');
    console.log(myBookStack.length); // 2
    console.log(myBookStack.peek()); // The Stand
    myBookStack.pop();
    console.log(myBookStack.length); // 1
    console.log(myBookStack.peek()); // Oathbringer
    console.log(myBookStack.isEmpty()); // false
    myBookStack.pop();
    console.log(myBookStack.isEmpty()); // true
    
    코드 펜here을 볼 수 있습니다.

    줄을 서다


    대기열은 구조와 방법상 창고와 유사하지만, 그 패턴은 다르다.대기열은'선진 선출'또는'선진 선출'방법을 사용한다.영화표를 사기 위해 줄을 서서 기다리는 사람으로 볼 수 있다.
    줄을 가장 오래 서는 사람이 갓 가입한 사람보다 먼저 서비스를 받는다.

    용례


    대기열은 체인 테이블과 매우 비슷합니다. 보통 광도 우선 검색이나 캐시를 실현할 때 사용됩니다.

    제약조건


    노드를 추가하고 삭제할 때, 대기열을 업데이트하기가 더욱 어려워집니다.

    메서드


    대기열은 다음과 같은 방법을 사용합니다.
  • enqueue(item): 대기열
  • 에서 맨 위 항목 삭제
  • dequeue(): 대기열 상단에 항목 추가
  • peek(): 대기열 상단의 항목으로 돌아가기
  • isEmpty(): 대기열이 비어 있으면 true
  • 로 돌아갑니다.

    만들래요.


    이 예에서는 JavaScript 클래스를 사용합니다.함수 클립의 역할을 보고 싶으면 창고 부분을 참고하십시오.
    건조사
    클래스 MovieQueue를 정의하고 속성이 있는 구조 함수 방법을 제공합니다.
  • this.queue = [];
  • constructor() {
      this.queue = [];
    }
    
    얻다
    대기열 길이로 돌아가는 Getter를 추가합니다.우리는 다른 방법에서 이 점을 사용할 것이다.
    get length() {
      return this.queue.length;
    }
    
    줄을 서다
    우리는 그룹의 첫 번째 인덱스 (대기열 뒤) 에 항목을 추가하려고 합니다.array.unshift() 방법을 사용하겠습니다.
    enqueue(item) {
      return queue.unshift(item);
    }
    
    나열하다
    대기열의 첫 번째 항목이나 그룹의 마지막 항목을 삭제해야 합니다.우리는 array.pop() 방법을 간단하게 사용해서 이 점을 실현할 수 있다.
    dequeue() {
      return queue.pop();
    }
    
    훔쳐보다
    우리는 대열 중의 첫 번째 항목이 무엇인지 보고 싶다.이것은 수조의 마지막 항목이라는 것을 기억해라.우리는 queue[this.length — 1]를 사용하여 이 값을 얻을 것이다.
    peek() {
      return queue[this.length - 1];
    }
    
    창고가 비다
    만약 대기열이 비어 있다면,true로 돌아가기를 희망합니다.우리는 이 정보를 얻기 위해 길이 방법을 사용할 수 있다.
    isEmpty() {
      return this.length === 0;
    }
    

    이 모든 것을 함께 놓아라


    우리의 최종 영화 대기열 코드는 다음과 같습니다.
    class MovieQueue {
      constructor() {
        this.queue = [];
      }
    
      enqueue(item) {
        return this.queue.unshift(item);
      }
    
      dequeue() {
        return this.queue.pop();
      }
    
      peek() {
        return this.queue[this.length - 1];
      }
    
      get length() {
        return this.queue.length;
      }
    
      isEmpty() {
        return this.queue.length === 0;
      }
    }
    
    몇 가지 이름으로 테스트해 봅시다.
    const myMovieQueue = new MovieQueue();
    myMovieQueue.enqueue('Sandra');
    myMovieQueue.enqueue('Rob');
    myMovieQueue.enqueue('Lisa');
    myMovieQueue.enqueue('Kai');
    console.log(myMovieQueue.length); // 4
    console.log(myMovieQueue.peek()); // Sandra
    myMovieQueue.dequeue();
    myMovieQueue.dequeue();
    console.log(myMovieQueue.peek()); // Lisa
    
    코드 펜here을 볼 수 있습니다.
    나는 이 강좌가 당신으로 하여금 대기열과 창고 간의 차이를 더욱 잘 이해하게 할 수 있기를 바랍니다.

    좋은 웹페이지 즐겨찾기