Heim >Web-Frontend >js-Tutorial >Eine kurze Erklärung, wie Beispiele für Stapeldatenstrukturen mit JavaScript implementiert werden

Eine kurze Erklärung, wie Beispiele für Stapeldatenstrukturen mit JavaScript implementiert werden

巴扎黑
巴扎黑Original
2017-08-06 15:25:331053Durchsuche

Stack, auch bekannt als Stack, ist eine lineare Tabelle mit eingeschränkten Operationen. Der folgende Artikel führt Sie hauptsächlich in die relevanten Informationen zur Verwendung von JavaScript zur Implementierung der Datenstruktur des Stacks ein , Freunde in Not können sich darauf beziehen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich den relevanten Inhalt zur Datenstruktur des JavaScript-Implementierungsstapels vor und stellt ihn als Referenz zur Verfügung Und studieren. Nicht viel zu sagen, werfen wir einen Blick auf die ausführliche Einführung:

Stack (englisch: Stack), der auch direkt als Stack bezeichnet werden kann, ist eine spezielle serielle Datenstruktur in der Informatik Das Besondere daran ist, dass die Operationen zum Hinzufügen von Daten (Push) und Ausgeben von Daten (Pop) nur an einem Ende der verknüpften Liste oder des Arrays (Stack-Top-Indikator, englisch: top) genannt werden. Darüber hinaus kann der Stapel auch in Form eines eindimensionalen Arrays oder einer verbundenen Sequenz implementiert werden.

Da die gestapelte Datenstruktur nur Operationen an einem Ende zulässt, arbeitet sie nach dem Prinzip von LIFO (Last In First Out). – Wikipedia

Das Obige ist Wikipedias Interpretation des Stapels. Als nächstes verwenden wir JavaScript (ES6)-Code, um die Stack-Datenstruktur zu implementieren

Implementieren Sie eine Stack-Klasse


/**
* Stack 类
*/
class Stack {
 constructor() {
 this.data = []; // 对数据初始化
 this.top = 0; // 初始化栈顶位置
 }

 // 入栈方法
 push() {
 const args = [...arguments];
 args.forEach(arg => this.data[this.top++] = arg);
 return this.top;
 }

 // 出栈方法
 pop() {
 if (this.top === 0) throw new Error('The stack is already empty!');
 const peek = this.data[--this.top];
 this.data = this.data.slice(0, -1);
 return peek;
 }

 // 返回栈顶元素
 peek() {
 return this.data[this.top - 1];
 }

 // 返回栈内元素个数
 length() {
 return this.top;
 }

 // 清除栈内所有元素
 clear() {
 this.top = 0;
 return this.data = [];
 }

 // 判断栈是否为空
 isEmpty() {
 return this.top === 0;
 }
}

// 实例化
const stack = new Stack();

stack.push(1);
stack.push(2, 3);
console.log(stack.data); // [1, 2, 3]
console.log(stack.peek()); // 3
console.log(stack.pop()); // 3, now data is [1, 2]
stack.push(3);
console.log(stack.length()); // 3
stack.clear(); // now data is []

Verwenden Sie die Idee des Stapels, um Zahlen in Binär- und Oktalzahlen umzuwandeln


/**
 * 将数字转换为二进制和八进制
 */
const numConvert = (num, base) => {
 const stack = new Stack();
 let converted = '';

 while(num > 0) {
 stack.push(num % base);
 num = Math.floor(num / base);
 }

 while(stack.length() > 0) {
 converted += stack.pop(); 
 }

 return +converted;
}

console.log(numConvert(10, 2)); // 1010

Verwenden Sie die Stapelidee, um zu bestimmen, ob eine bestimmte Zeichenfolge oder Zahl ein Palindrom ist


/**
 * 判断给定字符串或者数字是否是回文
 */
const isPalindrome = words => {
 const stack = new Stack();
 let wordsCopy = '';
 words = words.toString();

 Array.prototype.forEach.call(words, word => stack.push(word));

 while(stack.length() > 0) {
 wordsCopy += stack.pop();
 }

 return words === wordsCopy;
}

console.log(isPalindrome('1a121a1')); // true
console.log(isPalindrome(2121)); // false

Das Obige ist die Datenstruktur von Der Stapel wird mithilfe von JavaScript implementiert. Einige Algorithmen sind möglicherweise unzureichend, dies dient jedoch nur dazu, die Implementierung des Stapels durch JS zu demonstrieren

Das obige ist der detaillierte Inhalt vonEine kurze Erklärung, wie Beispiele für Stapeldatenstrukturen mit JavaScript implementiert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn