摘要:我對棧的學(xué)習(xí)因?yàn)槭莻€(gè)新手,所以都是最簡單的知識學(xué)習(xí)梳理。棧是一種遵從后進(jìn)先出原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱作棧頂,另一端叫做棧底。棧的學(xué)習(xí)棧的創(chuàng)建創(chuàng)建一個(gè)類來表示棧。對于棧來說只能用和方法來進(jìn)行添加和刪除元素。
我對棧的學(xué)習(xí)
因?yàn)槭莻€(gè)新手,所以都是最簡單的知識學(xué)習(xí)梳理。
什么是棧數(shù)組是計(jì)算機(jī)科學(xué)中最常用的數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)元素的集合。有時(shí)候我們需要一種添加或者刪除元素時(shí)更可控的數(shù)據(jù)結(jié)構(gòu),他們就是隊(duì)列和棧。
隊(duì)列是遵從先進(jìn)先出(FIFO)原則的一組有序的項(xiàng),隊(duì)列在尾部添加新元素,并從頂部移除元素。這里不先詳細(xì)說明。
棧是一種遵從后進(jìn)先出(LIFO)原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱作棧頂,另一端叫做棧底。新元素都在棧頂。
棧也被用在編譯語言的編譯器和內(nèi)存中保存變量、方法調(diào)用等。
棧的學(xué)習(xí)棧的創(chuàng)建
創(chuàng)建一個(gè)類來表示棧。
function Stack() { //各種屬性和方法的聲明 }
需要一種數(shù)據(jù)結(jié)構(gòu)來保存棧里的元素,這里選擇數(shù)組。
var items = [];
棧的基本操作
入棧方法:添加元素到棧,這里要注意添加到棧的元素只能到棧頂,也就是棧的末尾。
this.push = function (element) { items.push(element); }
出棧方法:移除棧里的元素,注意移除的是最后添加進(jìn)去的元素。
this.pop = function () { return items.pop(); }
對于棧來說只能用push和pop方法來進(jìn)行添加和刪除元素。
獲取棧頂元素:我們想知道最后添加的元素是什么
this.peek = function () { return items[items.length - 1]; }
別忘了這里我們使用數(shù)組來存儲棧內(nèi)的元素
判斷??眨簵榭辗祷豻rue。
this.isEmpty = function () { return items.length == 0; }
對于集合,最好是使用size來代替length,這里我們簡單了。
清空棧:移除棧內(nèi)的所有元素,把棧清空
this.clear = function () { items = []; //最簡單的方式 }棧的使用
首先需要初始化Stack類,然后驗(yàn)證一下棧是否為空
var stack = new Stack(); console.log(stack.isEmpty()); //true,此時(shí)還沒有添加元素
然后添加元素入棧
stack.push(8); stack.push(4);
獲得最后添加的元素
console.log(stack.peek()); //4,因?yàn)?是最后被添加的元素
再添加一個(gè)元素
stack.push(11); console.log(stack.size()); //輸出3,此時(shí)棧里有3個(gè)元素 console.log(stack.isEmpty()); //false,此時(shí)棧里已經(jīng)有元素了
移除兩個(gè)元素
stack.pop(); stack.pop(); console.log(stack.size()); //1,此時(shí)只剩下一個(gè)元素進(jìn)制的轉(zhuǎn)換
10進(jìn)制轉(zhuǎn)換為其他進(jìn)制通常都是整除法。(可以自行搜索進(jìn)制轉(zhuǎn)換時(shí)的方法以及形式)
/** * [數(shù)字,轉(zhuǎn)換成相應(yīng)進(jìn)制的進(jìn)制數(shù)] * @param {[Number]} decNumber [想轉(zhuǎn)的數(shù)] * @param {[Number]} base [想轉(zhuǎn)的進(jìn)制] * @return {[Number]} [轉(zhuǎn)換進(jìn)制后的數(shù)] */ function baseConverter (decNumber, base) { var remStack = new Stack(), rem, baseString = "", digits = "0123456789ABCDEF"; //將每次得到的進(jìn)制數(shù)放入棧中 while (decNumber > 0) { rem = Math.floor(decNumber % base); remStack.push(rem); decNumber = Math.floor(decNumber / base); } //后進(jìn)先出,所以出棧剛好符合進(jìn)制轉(zhuǎn)換的形式 while (!remStack.isEmpty()) { //這里通過digits的下標(biāo)來獲得相應(yīng)字符。比如pop出7,這里digits[7]就是7,pop出16,這里digits[16]就是F baseString += digits[remStack.pop()]; } return baseString; } baseConverter(100345, 2); //11000011111111001 baseConverter(100345, 8); //303771 baseConverter(100345, 16); //187F9
下一篇簡單的學(xué)習(xí)隊(duì)列。。。。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86920.html
摘要:我對隊(duì)列的學(xué)習(xí)什么是隊(duì)列隊(duì)列是遵循先進(jìn)先出原則的一組有序的項(xiàng)。最新添加的元素必須排在隊(duì)列的末尾。隊(duì)列的學(xué)習(xí)隊(duì)列的操作其實(shí)是和棧是差不多的,但是隊(duì)列只允許新數(shù)據(jù)在后端進(jìn)行添加。這里是最小優(yōu)先隊(duì)列,優(yōu)先值較小的元素被放置在隊(duì)列最前面。 我對JS隊(duì)列的學(xué)習(xí) 什么是隊(duì)列 隊(duì)列是遵循FIFO(先進(jìn)先出)原則的一組有序的項(xiàng)。隊(duì)列在尾部添加新元素,并從頂部移除元素。最新添加的元素必須排在隊(duì)列的末尾。...
摘要:棧的應(yīng)用前面介紹了那么多棧相關(guān)的知識,最后也是介紹棧的應(yīng)用場景的時(shí)候了,棧的實(shí)際應(yīng)用非常廣泛,例如用來存儲訪問過的任務(wù)或路徑撤銷的操作。 棧的定義 什么是棧?棧是一種遵循后進(jìn)先出原則的有序集合,新添加的或者待刪除的元素都保存在棧的同一端,稱為棧頂,另一端稱為棧底,在棧里,新元素靠近棧頂,舊元素靠近棧底,用個(gè)圖來看大概這樣式的:showImg(https://segmentfault.c...
摘要:我對字典的簡單學(xué)習(xí)字典的概念集合字典和散列表都可以來存儲不重復(fù)的值。字典也被稱為映射。中有集合類的實(shí)現(xiàn),也有字典類的實(shí)現(xiàn)。相關(guān)操作方法實(shí)現(xiàn)方法,判斷某個(gè)鍵值是否在這個(gè)字典中,有則返回。實(shí)現(xiàn)方法,將字典所有的值以數(shù)組的形式返回。 我對JS字典的簡單學(xué)習(xí) 字典的概念 集合、字典和散列表都可以來存儲不重復(fù)的值。在集合中我們使用[值,值]來保存,在字典和散列表中使用[鍵,值]來存儲數(shù)據(jù)。 字典...
摘要:利用存棧的方式來所有這個(gè)方法目前來看是對我直接有效的,但是實(shí)際運(yùn)行過程中,會報(bào)內(nèi)存泄漏的異常,原因是我的會對每一個(gè)啟動時(shí)進(jìn)行添加,而當(dāng)我某個(gè)時(shí),里對應(yīng)的無法被,這樣導(dǎo)致我的內(nèi)存開銷增加了。原文地址使用解決存棧的內(nèi)存泄漏問題我的博客時(shí)空路由器 當(dāng) Android 想要退出應(yīng)用時(shí),我們總是希望完全退出。但是 Android 并沒有提供一個(gè)完全退出 App 的函數(shù)。 Google 上搜索了一...
閱讀 2729·2021-11-24 09:38
閱讀 2019·2019-08-30 15:53
閱讀 1349·2019-08-30 15:44
閱讀 3270·2019-08-30 14:10
閱讀 3644·2019-08-29 16:29
閱讀 1837·2019-08-29 16:23
閱讀 1144·2019-08-29 16:20
閱讀 1520·2019-08-29 11:13