1. 程式人生 > 其它 >JavaScript資料結構之棧結構

JavaScript資料結構之棧結構

技術標籤:資料結構與演算法javascriptjs資料結構

JavaScript資料結構之棧結構

前言

隨著前端的興起,JavaScript這門語言也越來越受歡迎。接下來,讓我們瞭解一下如何使用JavaScript來寫資料結構中的棧結構吧!


一、棧結構是什麼?

陣列是一個線性結構,並且可以在陣列的任意位置插入和刪除元素。而棧就是比較常見的受限線性結構。無論是插入或是刪除只能在棧頂進行操作。在棧中插入操作被稱為壓棧或是入棧,刪除操作被稱為出棧或是退棧。

棧的特點為先進後出後進先出(LIFO:last in first out)。

二、常見的棧結構使用:函式呼叫棧、遞迴等。

函式呼叫棧:如A函式中呼叫了B函式,B函式中又呼叫了C函式,這樣在呼叫A函式時先將A函式壓入棧,由於A函式中呼叫了B函式,所以將B函式再壓入棧,以此類推,c函式也壓入棧。這時棧頂是C函式,只有C函式執行完出棧後,B函式才能執行出棧,最後A函數出棧。這就是函式呼叫棧。
遞迴:遞迴是在函式內部呼叫自身,原理和函式呼叫棧類似。

三、棧的常見操作

push(element):新增一個新元素到棧頂位置;

pop():移除棧頂的元素,同時返回被移除的元素;

peek():返回棧頂的元素,不對棧做任何修改(該方法不會移除棧頂的元素,僅僅返回它);

isEmpty():如果棧裡沒有任何元素就返回true,否則返回false;

size():返回棧裡的元素個數。這個方法和陣列的length屬性類似;

toString():將棧結構的內容以字串的形式返回。

四、使用步驟

1.建立Stack類:

function Stack() {
            // 以陣列形式儲存棧資料
            this.items = [];

            // (不推薦!!!因為在Stack物件新增方法,其他物件無法複用)
            // this.push = function (element) {
            //    this.item.push(element);
// } // 在Stack類新增方法,可以使多物件複用 // 入棧 Stack.prototype.push = function (element) { this.items.push(element); } // 判斷是否為空 Stack.prototype.isEmpty = function () { return this.items.length == 0; } // 出棧 Stack.prototype.pop = function () { return this.items.pop(); } // 檢視棧頂元素 Stack.prototype.peek = function () { return this.items[this.items.length - 1] } // 獲取棧中元素個數 Stack.prototype.size = function () { return this.items.length; } // 以字串形式輸出元素 Stack.prototype.toString = function () { // 加上空字串隱式轉換成字串 let result = ''; for (let i of this.items) { // 加上' '可以在元素中以空格隔開 result += i + ' '; } return result; } // 以上程式碼也可以寫成ES6箭頭函式形式如: // Stack.prototype.push = (element) => { // this.item.push(element); // } }

2.使用棧:

let s = new Stack();

        // 將資料壓入棧
        s.push(10);
        s.push(20);
        s.push(30);
        s.push(40);

        // 將棧頂元素出棧(40出棧)
        console.log(s.pop());

        // 檢視棧頂元素(30)
        console.log(s.peek());

        // 檢視棧是否為空(false,目前棧還有3個元素)
        console.log(s.isEmpty());

        // 檢視棧元素個數(3)
        console.log(s.size());

        // 轉化成以空格隔開的字串形式(10 20 30)
        console.log(s.toString());

控制檯:


總結

看了這些,你是否對棧結構有了一定認識呢?

由於自身水平有限,本篇文章僅代表個人理解,如有錯誤,歡迎指正!與君共勉!