이전 블로그에서 다음 목록을 소개했습니다. 목록은 가장 간단한 구조이지만 더 복잡한 구조를 처리하려면 목록이 너무 간단 해 보이므로 목록과 비슷한 데이터 구조가 필요하지만 더 복잡한 스택이 필요합니다. 스택은 스택 상단에서만 데이터를 추가하거나 삭제할 수 있으므로이 작업은 매우 빠르고 구현하기 쉽기 때문에 효율적인 데이터 구조입니다.
1 : 스택에서의 작동.
스택은 특별한 목록입니다. 스택의 요소는 목록의 한쪽 끝을 통해서만 액세스 할 수 있으며이 끝은 스택의 상단입니다. 예를 들어, 식당에서 요리를 씻을 때는 먼저 상단 판만 씻을 수 있습니다. 요리를 씻은 후에는 접시 더미의 상단 만 달팽이만을 달성 할 수 있습니다. 스택을 "LIFO (Late-in-First-Out) (LIFO) 데이터 구조라고합니다.
스택에는 백인의 특성이 있기 때문에 첫 번째는 스택 상단에없는 요소에 액세스 할 수 없습니다. 스택이 낮은 요소를 얻으려면 위의 요소를 먼저 제거해야합니다. 스택으로 우리가 할 수있는 두 가지 주요 작업은 스택에 요소를 밀고 스택에 요소를 팝업하는 것입니다. 스택에 들어가면 Method Push () 메소드를 사용할 수 있으며, 켜면 POP () 메소드를 사용할 수 있습니다. POP () 메소드는 스택 상단의 요소에 액세스 할 수 있지만 메소드를 호출 한 후 스택 상단의 요소는 스택에서 영구적으로 삭제됩니다. 우리가 사용하는 또 다른 방법은 Peek ()이며 스택의 상단 요소 만 삭제하지 않고 반환합니다.
스택 항목 및 스택 종료의 실제 열 다이어그램은 다음과 같습니다.
push (), pop () 및 peek ()는 스택의 세 가지 주요 방법이지만 스택에는 다른 방법과 속성이 있습니다. 다음과 같이 :
CLEAR () : 스택의 모든 요소를 지우십시오.
길이 () : 스택에 요소 수를 기록하십시오.
두 가지 : 스택의 구현은 다음과 같습니다.
스택 클래스 메소드를 먼저 구현하여 시작할 수 있습니다. 다음과 같이 :
코드 사본은 다음과 같습니다.
함수 스택 () {
this.datastore = [];
this.top = 0;
}
위와 같이 : Datastore는 스택에 모든 요소를 저장합니다. 변수 상단은 스택 상단의 위치를 기록하고 0으로 초기화됩니다. 즉, 스택 상단의 해당 배열의 시작 위치는 스택으로 밀려 나면 스택 상단의 해당 배열이 0임을 의미합니다. 이 변수의 값은 그에 따라 변경됩니다.
또한 다음 방법이 있습니다 : push (), pop (), peek (), clear (), longth ();
1. 푸시 () 메소드; 새 요소를 스택에 밀어 넣을 때는 변수 상단에 해당하는 배열에 저장된 다음 상위 값이 1 씩 증가하여 배열의 다음 위치를 가리 킵니다. 다음 코드 :
코드 사본은 다음과 같습니다.
함수 푸시 (요소) {
this.datastore [this.top ++] = 요소;
}
2. POP () 메소드는 푸시 () 메소드와 반대입니다. 상단 요소를 반환하고 최고 값을 1 씩 공제합니다. 다음 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
기능 pop () {
this.datastore [-this.top];
}
3. Peek () 메소드는 배열의 상단 1 위치, 즉 스택의 상단 1 요소에서 요소를 반환합니다.
코드 사본은 다음과 같습니다.
함수 peek () {
this.datastore [this.top -1];
}
4. length () 메소드 때때로 스택에 몇 개의 요소가 있는지 알아야합니다. 다음 코드와 같이 변수 최고 값을 반환하여 스택의 요소 수를 반환 할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 길이 () {
this.top;
}
5. clear (); 때때로 우리는 스택을 지우고 싶고 변수의 최고 값을 0으로 설정합니다. 다음 코드 :
코드 사본은 다음과 같습니다.
function clear () {
this.top = 0;
}
아래의 모든 코드 :
코드 사본은 다음과 같습니다.
함수 스택 () {
this.datastore = [];
this.top = 0;
}
stack.prototype = {
// 새 요소를 스택에 누릅니다
푸시 : 함수 (요소) {
this.datastore [this.top ++] = 요소;
},
// 스택의 상단 요소에 액세스하면 스택의 상단 요소가 영구적으로 삭제됩니다.
팝 : function () {
this.datastore [-this.top];
},
// 배열의 상단 1 위치, 즉 스택의 상단 요소로 요소를 반환합니다.
엿보기 : function () {
this.datastore [this.top -1];
},
// 스택에 몇 개의 요소가 저장되어 있습니다
길이 : function () {
this.top;
},
// 스택을 지 웁니다
Clear : function () {
this.top = 0;
}
};
데모의 예는 다음과 같습니다.
var 스택 = 새로운 스택 ();
stack.push ( "a");
stack.push ( "b");
stack.push ( "c");
console.log (stack.length ()); // 3
console.log (stack.peek ()); // c
var popped = stack.pop ();
Console.log (Popped); // c
console.log (stack.peek ()); // b
stack.push ( "d");
console.log (stack.peek ()); // d
stack.clear ();
console.log (stack.length ()); // 0
console.log (stack.peek ()); // 한정되지 않은
아래에서 우리는 계승 기능의 재귀 적 정의를 구현할 수 있습니다. 예를 들어, 5! FACTORION 5! = 5 * 4 * 3 * 2 * 1;
다음 코드 :
코드 사본은 다음과 같습니다.
기능 사실 (n) {
var s = 새로운 스택 ();
while (n> 1) {
s.push (n-);
}
var product = 1;
while (s.length ()> 0) {
곱 *= s.pop ();
}
반품 제품;
}
Console.log (사실 (5));
위의 코드는 다음을 의미합니다. 먼저 숫자 5를 함수로 전달하고, while 루프를 사용하고, 매번 1을 줄이기 전에, 변수 n이 1보다 작을 때까지 스택에 사용하는 함수의 푸시 ()를 감소시키기 전에 변수 제품을 정의하십시오. 스택의 길이 () 메소드별로 0보다 큰지 여부를 결정하고 제품* = s.pop () 메소드가 실행될 때마다 POP () 메소드는 스택의 상단 요소를 반환하고 스택에서 요소를 삭제합니다. 따라서 실행할 때마다 s.length () <= 0까지 요소를 삭제하십시오. 따라서 제품 = 5*4*3*2*1. 등.