摘要:今天實(shí)現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一棧棧在中有著非常重要,基本類型會(huì)存儲(chǔ)在棧中,你可以操作實(shí)際的值。要定義一個(gè)棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。首先創(chuàng)建一個(gè)函數(shù)對(duì)象表示棧。
Javascript工程師,總會(huì)面對(duì)一個(gè)問題,數(shù)據(jù)結(jié)構(gòu)和算法會(huì)成為自己的短板,不僅是對(duì)非科班,甚至一些科班出身的工程師來說也是自己的短板,于是就有了這系列文章。
基礎(chǔ)決定深度,前端入門易,上升困難,學(xué)習(xí)曲線陡,很多時(shí)候就是因?yàn)槿鄙龠@些思維。
今天實(shí)現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一 棧
棧在js中有著非常重要,基本類型會(huì)存儲(chǔ)在棧中,你可以操作實(shí)際的值。
要定義一個(gè)棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。
棧是一個(gè)線性表,遵循著LIFO原則的有序集合,也就是先進(jìn)后出,先進(jìn)入棧的元素,會(huì)儲(chǔ)存在棧底,后進(jìn)入的元素會(huì)放在棧頂,就像我們小時(shí)候見過的糧倉(cāng)一樣,先進(jìn)入的小麥被放在棧底。并且,棧只有一端是可以操作的,就是棧頂。
function Stack() { }
首先創(chuàng)建一個(gè)函數(shù)(對(duì)象)表示棧。
let items = [];
然后需要?jiǎng)?chuàng)建一個(gè)數(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ù)牡谝粋€(gè)元素也就是整個(gè)棧的最后一個(gè)元素。 this.isEmpty = function() { return items.length == 0; }//檢查棧是不是為空的,返回布爾值 this.size = function() { return items.length; }//返回棧的長(zhǎng)度 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()) } }
這樣就簡(jiǎn)單的創(chuàng)建了棧
接下來需要試一下棧的基本功能
let stack = new Stack();定義一個(gè)新的對(duì)象 console.log(stack.__proto__)//__proto__等于prototype.constructor
棧就這樣創(chuàng)建完成了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82991.html
摘要:今天實(shí)現(xiàn)的是最基本的數(shù)據(jù)結(jié)構(gòu)之一棧棧在中有著非常重要,基本類型會(huì)存儲(chǔ)在棧中,你可以操作實(shí)際的值。要定義一個(gè)棧,首先需要明白,棧的基本結(jié)構(gòu)有哪些,需要遵循哪些規(guī)則。首先創(chuàng)建一個(gè)函數(shù)對(duì)象表示棧。 Javascript工程師,總會(huì)面對(duì)一個(gè)問題,數(shù)據(jù)結(jié)構(gòu)和算法會(huì)成為自己的短板,不僅是對(duì)非科班,甚至一些科班出身的工程師來說也是自己的短板,于是就有了這系列文章?;A(chǔ)決定深度,前端入門易,上升困難,...
摘要:我們都知道數(shù)組是里面比較常用的一種數(shù)據(jù)結(jié)構(gòu),棧和數(shù)組類似,定義如下棧是一種遵從后進(jìn)先出原則的有序集合。新增加和待刪除的元素都保存在棧的尾部,也稱棧頂,相反的另一端就叫棧底,在棧的這種數(shù)據(jù)結(jié)構(gòu)里面,我們新增的元素都在棧頂,舊的元素都在棧底。 由于不是計(jì)算機(jī)專業(yè)出身,對(duì)數(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)棧堆隊(duì)列。前端進(jìn)擊的巨人一執(zhí)行上下文與執(zhí)行棧,變量對(duì)象中解釋執(zhí)行棧時(shí),舉了一個(gè)乒乓球盒子的例子,來演示棧的存取方式,這里再舉個(gè)栗子搭積木。對(duì)于基本類型,棧中存儲(chǔ)的就是它自身的值,所以新內(nèi)存空間存儲(chǔ)的也是一個(gè)值。 面試經(jīng)常遇到的深淺拷貝,事件輪詢,函數(shù)調(diào)用棧,閉包等容易出錯(cuò)的題目,究其原因,都是跟JavaScript基礎(chǔ)知識(shí)不牢固有關(guān),下層地基沒打好,上層就是豆腐渣工程,...
閱讀 667·2019-08-30 15:44
閱讀 1387·2019-08-30 11:02
閱讀 2996·2019-08-29 18:42
閱讀 3517·2019-08-29 16:16
閱讀 1725·2019-08-26 13:55
閱讀 1778·2019-08-26 13:45
閱讀 2393·2019-08-26 11:43
閱讀 3257·2019-08-26 10:32