摘要:今天實現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一棧棧在中有著非常重要,基本類型會存儲在棧中,你可以操作實際的值。要定義一個棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。首先創(chuàng)建一個函數(shù)對象表示棧。
Javascript工程師,總會面對一個問題,數(shù)據(jù)結(jié)構(gòu)和算法會成為自己的短板,不僅是對非科班,甚至一些科班出身的工程師來說也是自己的短板,于是就有了這系列文章。
基礎(chǔ)決定深度,前端入門易,上升困難,學(xué)習(xí)曲線陡,很多時候就是因為缺少這些思維。
今天實現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一 棧
棧在js中有著非常重要,基本類型會存儲在棧中,你可以操作實際的值。
要定義一個棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。
棧是一個線性表,遵循著LIFO原則的有序集合,也就是先進后出,先進入棧的元素,會儲存在棧底,后進入的元素會放在棧頂,就像我們小時候見過的糧倉一樣,先進入的小麥被放在棧底。并且,棧只有一端是可以操作的,就是棧頂。
function Stack() { }
首先創(chuàng)建一個函數(shù)(對象)表示棧。
let items = [];
然后需要創(chuàng)建一個數(shù)組來保存需要保存的元素。
this.push = function(element) { items.push(element) }//調(diào)用數(shù)組的push方法,將元素加入棧 this.pop = function() { return items.pop(); }//調(diào)用數(shù)組的pop方法移除棧頂元素并且返回該元素 this.peek = function() { return items[items.length - 1] }//調(diào)用數(shù)組的peek方法,返回棧頂?shù)牡谝粋€元素也就是整個棧的最后一個元素。 this.isEmpty = function() { return items.length == 0; }//檢查棧是不是為空的,返回布爾值 this.size = function() { return items.length; }//返回棧的長度 this.clear = function() { items = []; }//刪除棧中所有的元素 this.print = function() { console.log(items.toString) }//打出棧所有的元素
接下來需要給棧定義方法
function Stack() { let items = []; this.push = function(element) { items.push(element) console.log(this) } this.pop = function() { return items.pop(); } this.peek = function() { return items[items.length - 1] } this.isEmpty = function() { return items.length == 0; } this.size = function() { return items.length; } this.clear = function() { items = []; } this.print = function() { console.log(items.toString()) } }
這樣就簡單的創(chuàng)建了棧
接下來需要試一下棧的基本功能
let stack = new Stack();定義一個新的對象 console.log(stack.__proto__)//__proto__等于prototype.constructor
棧就這樣創(chuàng)建完成了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/50779.html
摘要:今天實現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一棧棧在中有著非常重要,基本類型會存儲在棧中,你可以操作實際的值。要定義一個棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。首先創(chuàng)建一個函數(shù)對象表示棧。 Javascript工程師,總會面對一個問題,數(shù)據(jù)結(jié)構(gòu)和算法會成為自己的短板,不僅是對非科班,甚至一些科班出身的工程師來說也是自己的短板,于是就有了這系列文章。基礎(chǔ)決定深度,前端入門易,上升困難,...
摘要:我們都知道數(shù)組是里面比較常用的一種數(shù)據(jù)結(jié)構(gòu),棧和數(shù)組類似,定義如下棧是一種遵從后進先出原則的有序集合。新增加和待刪除的元素都保存在棧的尾部,也稱棧頂,相反的另一端就叫棧底,在棧的這種數(shù)據(jù)結(jié)構(gòu)里面,我們新增的元素都在棧頂,舊的元素都在棧底。 由于不是計算機專業(yè)出身,對數(shù)據(jù)結(jié)構(gòu)這些了解的比較少,最近看了一些相關(guān)的書籍,這里做一些總結(jié)。本篇要說的是棧。我們都知道數(shù)組是JavaScript里面...
摘要:棧內(nèi)存與堆內(nèi)存淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。棧內(nèi)存與堆內(nèi)存中的變量分為基本類型和引用類型。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 前言 想寫好前端,先練好內(nèi)功。 棧內(nèi)存與堆內(nèi)存 、淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。 筆者寫的 JavaScrip...
摘要:中有三種數(shù)據(jù)結(jié)構(gòu)棧堆隊列。前端進擊的巨人一執(zhí)行上下文與執(zhí)行棧,變量對象中解釋執(zhí)行棧時,舉了一個乒乓球盒子的例子,來演示棧的存取方式,這里再舉個栗子搭積木。對于基本類型,棧中存儲的就是它自身的值,所以新內(nèi)存空間存儲的也是一個值。 面試經(jīng)常遇到的深淺拷貝,事件輪詢,函數(shù)調(diào)用棧,閉包等容易出錯的題目,究其原因,都是跟JavaScript基礎(chǔ)知識不牢固有關(guān),下層地基沒打好,上層就是豆腐渣工程,...
閱讀 1887·2021-11-11 16:55
閱讀 2088·2021-10-08 10:13
閱讀 750·2019-08-30 11:01
閱讀 2159·2019-08-29 13:19
閱讀 3286·2019-08-28 18:18
閱讀 2625·2019-08-26 13:26
閱讀 584·2019-08-26 11:40
閱讀 1876·2019-08-23 17:17