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을 볼 수 있습니다.나는 이 강좌가 당신으로 하여금 대기열과 창고 간의 차이를 더욱 잘 이해하게 할 수 있기를 바랍니다.
Reference
이 문제에 관하여(JavaScript의 스택 및 큐), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/emmabostian/stacks-vs-queues-in-javascript-4d1o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)