十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
前言

棧和隊(duì)列是web開發(fā)中最常用的兩種數(shù)據(jù)結(jié)構(gòu)。絕大多數(shù)用戶,甚至包括web開發(fā)人員,都不知道這個(gè)驚人的事實(shí)。如果你是一個(gè)程序員,那么請聽我講兩個(gè)啟發(fā)性的例子:使用堆棧來組織數(shù)據(jù),來實(shí)現(xiàn)文本編輯器的“撤消”操作;使用隊(duì)列處理數(shù)據(jù),實(shí)現(xiàn)web瀏覽器的事件循環(huán)處理事件(單擊click、懸停hoover等)。
等等,先想象一下我們作為用戶和程序員,每天使用棧和隊(duì)列的次數(shù),這太驚人了吧!由于它們在設(shè)計(jì)上有普遍性和相似性,我決定從這里開始為大家介紹數(shù)據(jù)結(jié)構(gòu)。
棧
在計(jì)算機(jī)科學(xué)中,棧是一種線性數(shù)據(jù)結(jié)構(gòu)。如果你理解起來有困難,就像最初非常困惑的我一樣,不妨這樣認(rèn)為:一個(gè)??梢詫?shù)據(jù)按照順序進(jìn)行組織和管理。
要理解這種順序,我們可以把棧這種結(jié)構(gòu)想象為自助餐廳的一堆盤子,當(dāng)一個(gè)盤子被疊加到一堆盤子上時(shí),原有的盤子保留了它們原來的順序;同時(shí),當(dāng)一個(gè)新盤子被添加時(shí),它會朝棧的底部方向堆積。每當(dāng)我們添加一個(gè)新盤子時(shí),被稱作入棧,這個(gè)新盤子處于棧的頂部,也被稱作棧頂。
這個(gè)添加盤子的過程會保留每個(gè)盤子被添加到棧中的順序,每次從棧中取出一個(gè)盤子時(shí)也是一樣的。我可能用了太多的篇幅來描述自助餐廳中的盤子是怎樣被添加和刪除的過程。
為了是大家理解棧更多的技術(shù)細(xì)節(jié),讓我們回顧一下前面關(guān)于文本編輯器的“撤消”操作。每次將文本添加到文本編輯器事,該文本被壓入棧中。其中第一次添加的文本代表?xiàng)5牡撞浚5祝?;最后一次的修改表示棧的頂部(棧頂)。如果用戶希望撤銷最后一次修改,則刪除處于棧的頂部的那段文本,這個(gè)過程可以不斷重復(fù),一直到棧中沒有更多內(nèi)容,這時(shí)我們會得到一個(gè)空白文件。
棧的操作
現(xiàn)在我們對棧的模型有了基本概念,下一步就要定義棧的兩個(gè)操作:
棧的實(shí)現(xiàn)
現(xiàn)在讓我們開始為棧編寫代碼吧!
棧的屬性
為了實(shí)現(xiàn)棧結(jié)構(gòu),我們將會創(chuàng)建一個(gè)名為 Stack 的構(gòu)造函數(shù)。棧的每個(gè)實(shí)例都有兩個(gè)屬性:_size 和 _storage。
function Stack() {
this._size = 0;
this._storage = {};
}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。