首頁  >  文章  >  web前端  >  javascript 實作堆疊的資料結構

javascript 實作堆疊的資料結構

巴扎黑
巴扎黑原創
2017-08-05 11:15:151466瀏覽

堆疊(stack)又稱為堆疊,它是一種運算受限的線性表,以下這篇文章主要為大家介紹了關於利用JavaScript實作堆疊的資料結構的相關資料,文中透過範例程式碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

本文主要介紹給大家的是關於JavaScript實作堆疊的資料結構的相關內容,分享出來供大家參考學習,話不多少,來一起看看詳細的介紹:

堆疊(英文:stack),也可直接稱棧,在電腦科學中,是一種特殊的串列形式的資料結構,它的特殊之處在於只能允許在連結串列或陣列的一端(稱為堆疊頂端指標,英文:top)進行加入資料(push)和輸出資料(pop)的運算。另外堆疊也可以用一維數組或連結串列的形式來完成。 

由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(LIFO, Last In First Out)的原理運作。

下面用JavaScript(ES6)程式碼對堆疊的資料結構進行實作

#實作一個Stack類別我們


/**
* 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 []

用堆疊的想法將數字轉換為二進位和八進位


/**
 * 将数字转换为二进制和八进制
 */
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

用堆疊的想法判斷給定字串或數字是否是回文


#
/**
 * 判断给定字符串或者数字是否是回文
 */
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

上面就是用JavaScript對棧的資料結構的實現,有些演算法可能欠妥,但是僅僅是為了演示JS對棧的實現

以上是javascript 實作堆疊的資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn