JavaScript中棧和隊(duì)列應(yīng)用詳情
什么是棧和隊(duì)列
棧如果用數(shù)組模擬的話是類似于一個(gè)U
形桶狀堆??臻g,地下是封口的,只能從頂部一個(gè)地方進(jìn)出,它的進(jìn)出都是有順序的,看下圖:如果是進(jìn)入,則是最下是最先進(jìn)入的,如果要出,則是從最頂部先出
和隊(duì)列來對(duì)比,只是數(shù)據(jù)結(jié)構(gòu)相同,隊(duì)列是一側(cè)進(jìn)一側(cè)出,做任務(wù)隊(duì)列調(diào)度的時(shí)候都是先入先出
什么時(shí)候用到棧
從編輯器開發(fā)寫代碼的時(shí)候,如果代碼的中的括號(hào)寫錯(cuò)了,則很容易判定出那個(gè)地方少了括號(hào),在JavaScript
語(yǔ)法中有可以設(shè)定大括號(hào){}
、中括號(hào):[]
、小括號(hào):()
、引號(hào):""
等可以判定的規(guī)則, 可以發(fā)現(xiàn)它是有一些規(guī)則的,可以通過兩側(cè)是否對(duì)稱來進(jìn)行判斷,如果不對(duì)稱則提示錯(cuò)誤
function (b){ let a = [] let obj = {"(":")","[":"]","{":"}"} for(let i = 0;i<b.length;i++ ){ const last = b[i] if(last in obj){ a.push(ele) }else{ if(ele!= obj[stack.pop]){ return false } } } return !a.length }
思路:它在棧中首先通過遍歷把數(shù)組的每一位放到棧中,如果發(fā)現(xiàn)放入棧中有相同的字符則把它兩個(gè)同時(shí)推出,在代碼中,循環(huán)遍歷對(duì)象如果傳入的對(duì)象在Obj
中有的話,則繼續(xù),如果沒有停止遍歷
目錄的計(jì)算
在Nodejs
中經(jīng)常碰到目錄的處理,比如webpack
,目標(biāo)是把當(dāng)前的相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑,/a/b/../c./b
,這種格式,pathResult
,把傳入的字符串通過/
拆分成數(shù)組,并判定它是否為空或者是是否相對(duì)路徑,并把它拆分并放到數(shù)組
function (path){ var pathArr = path.split('/') var newPath = [] arr.forEach(temp=>{ if(temp == '' || temp == '.'){ return }else if(item == '..'){ if(newPath.length){ newPath.pop() }else{ return } }else{ newPath.push(item) } }) }
它在棧中的應(yīng)用是把每個(gè)對(duì)應(yīng)的路徑名傳入到棧中,如果碰到相對(duì)路徑則,轉(zhuǎn)換為絕對(duì)路徑,最后在返回出 最后把該數(shù)組,通過/
拆分成字符串 return "/"+newPath.join('/')
到此這篇關(guān)于JavaScript中棧和隊(duì)列應(yīng)用詳情的文章就介紹到這了,更多相關(guān)JavaScript 棧和 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基于ReadWriteLock實(shí)現(xiàn)鎖的應(yīng)用
這篇文章主要介紹了Java基于ReadWriteLock實(shí)現(xiàn)鎖的應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java基于API接口爬取商品數(shù)據(jù)的示例代碼
Java作為一種流行的編程語(yǔ)言,可以用于編寫程序來調(diào)用這些API接口,從而獲取商品數(shù)據(jù),本文將介紹如何使用Java基于API接口爬取商品數(shù)據(jù),包括請(qǐng)求API、解析JSON數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)等步驟,并提供相應(yīng)的代碼示例,感興趣的朋友跟隨小編一起看看吧2023-10-10SpringBoot?JavaMailSender發(fā)送郵件功能(實(shí)例詳解)
JavaMailSender是Spring提供的,非常好用的,實(shí)現(xiàn)郵件發(fā)送的接口 ,這篇文章主要介紹了SpringBoot?JavaMailSender發(fā)送郵件功能,需要的朋友可以參考下2024-03-03springboot中使用mybatisplus自帶插件實(shí)現(xiàn)分頁(yè)的示例代碼
這篇文章主要介紹了springboot中使用mybatisplus自帶插件實(shí)現(xiàn)分頁(yè),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09springboot基于docsify?實(shí)現(xiàn)隨身文檔
這篇文章主要介紹了springboot基于docsify實(shí)現(xiàn)隨身文檔的相關(guān)資料,需要的朋友可以參考下2022-09-09Java實(shí)現(xiàn)AES算法的實(shí)例代碼
高級(jí)加密標(biāo)準(zhǔn)(AES,Advanced?Encryption?Standard)為最常見的對(duì)稱加密算法(微信小程序加密傳輸就是用這個(gè)加密算法的),本文重點(diǎn)給大家介紹Java實(shí)現(xiàn)AES算法的實(shí)例代碼,感興趣的朋友一起看看吧2022-02-02基于Springboot實(shí)現(xiàn)JWT認(rèn)證的示例代碼
本文主要介紹了基于Springboot實(shí)現(xiàn)JWT認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11