摘要:棧是最基本的數(shù)據(jù)結(jié)構(gòu)之一,他的特點是后進先出棧的基本功能進棧添加元素到棧頂出棧刪除棧頂?shù)脑夭⒎祷刈x取棧頂?shù)臄?shù)據(jù)元素判斷棧是否為空,為空返回計算棧存儲數(shù)據(jù)的大小清空棧打印棧中的所有元素代碼實現(xiàn)基本的架構(gòu)如下所添加元素到棧頂進棧的元素出棧,刪
棧是最基本的數(shù)據(jù)結(jié)構(gòu)之一,他的特點是:后進先出
棧的基本功能進棧:添加元素到棧頂
出棧:刪除棧頂?shù)脑夭⒎祷?/p>
讀取棧頂?shù)臄?shù)據(jù)元素
判斷棧是否為空,為空返回true
計算棧存儲數(shù)據(jù)的大小
清空棧
打印棧中的所有元素
代碼實現(xiàn)基本的架構(gòu)如下所:
function Stack(){ let item = []; /** * 添加元素到棧頂 * @param m 進棧的元素 */ this.enStack = function(m){ } /** * 出棧,刪除棧頂?shù)脑夭⒎祷? */ this.deStack = function(){ } /** * 讀取棧頂?shù)脑? */ this.peek = function(){ } /** * /判斷棧是否未為空 */ this.isEmpty = function(){ } /** * 計算棧的容量 */ this.size = function(){ } /** * 清空棧 */ this.clear = function(){ } /** * 打印棧中的所有元素 */ this.print = function(){ } }
this.enStack——進棧操作
this.enStack = function(m){ item.push(m); }
this.deStack——出棧
this.deStack = function(){ return item.pop(); }
this.peek 讀取棧頂?shù)脑?/p>
this.peek = function(){ return item[item.length - 1]; }
this.isEmpty 判斷棧是否為空
this.isEmpty = function(){ return item.length === 0; }
this.size 計算棧的容量
this.size = function(){ return item.length; }
this.clear 清空棧
this.clear = function(){ item = []; }
this.print 打印棧中的元素
this.print = function(){ console.log(item.toString()); }棧的實際應(yīng)用
在進制轉(zhuǎn)化的結(jié)果是將余數(shù)倒著排列,這時就需要用到棧,先得到的余數(shù)放后面,后得到的余數(shù)放前面,具體實現(xiàn)過程
十進制轉(zhuǎn)化為二進制十進制轉(zhuǎn)化為二進制的計算方式:除2取余法
代碼實現(xiàn)過程:
function transformTo(decNumber){ let remStack = new Stack(); let rem = ""; let remString = ""; while(decNumber){ rem = decNumber % 2; remStack.enStack(rem); decNumber = parseInt(decNumber / 2); } while(!remStack.isEmpty()){ remString += remStack.deStack().toString(); } return remString; } const decRes = transformTo(10); console.log(decRes);
最后的輸出結(jié)果是:1010
將十進制轉(zhuǎn)化為任意進制function transformTo(decNumber, base){ let remStack = new Stack(); let rem; let remString = ""; let digits = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"]; while(decNumber > 0){ rem = decNumber % base; remStack.enStack(rem); decNumber = parseInt(decNumber / base); } while(!remStack.isEmpty()){ remString += digits[remStack.deStack()]; } return remString; } const decRes = transformTo(1200, 16); console.log(decRes);
輸出結(jié)果是:4B0
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92171.html
摘要:對于棧來說,這個表尾稱為棧的棧頂,相應(yīng)的表頭稱為棧底。棧和隊列的區(qū)別棧的插入和刪除操作都是在一端進行的,而隊列的操作卻是在兩端進行的。出棧操作出棧操作就是在棧頂取出數(shù)據(jù),棧頂指針隨之下移的操作。 基本概念 棧和隊列都是動態(tài)的集合,在棧中,可以去掉的元素是最近插入的哪一個。棧實現(xiàn)了后進先出。在隊列中,可以去掉的元素總是在集合中存在的時間最長的那一個。隊列實現(xiàn)了先進先出的策略。 棧的官...
摘要:介紹棧是一種后進先出的線性表數(shù)據(jù)結(jié)構(gòu),分為棧頂和棧底兩端,僅允許在表的一端插入元素,這一端被稱為棧頂,另外一端稱之為棧底。 介紹 棧是一種后進先出的線性表數(shù)據(jù)結(jié)構(gòu),分為棧頂和棧底兩端,僅允許在表的一端插入元素,這一端被稱為棧頂,另外一端稱之為棧底。棧,只有兩種操作,分為入棧(壓棧)和出棧(退棧);向棧中添加元素的操作叫做入棧,相反從棧中刪除元素叫做出棧。 特點 只能從棧頂添加元素或者...
摘要:我們都知道數(shù)組是里面比較常用的一種數(shù)據(jù)結(jié)構(gòu),棧和數(shù)組類似,定義如下棧是一種遵從后進先出原則的有序集合。新增加和待刪除的元素都保存在棧的尾部,也稱棧頂,相反的另一端就叫棧底,在棧的這種數(shù)據(jù)結(jié)構(gòu)里面,我們新增的元素都在棧頂,舊的元素都在棧底。 由于不是計算機專業(yè)出身,對數(shù)據(jù)結(jié)構(gòu)這些了解的比較少,最近看了一些相關(guān)的書籍,這里做一些總結(jié)。本篇要說的是棧。我們都知道數(shù)組是JavaScript里面...
摘要:則會在轉(zhuǎn)移指令前執(zhí)行。總結(jié)與之間的關(guān)系如果在中含有語句,那么語句的還有作用嗎先看一段代碼如果你對內(nèi)存布局不是很清楚,請看這篇文章虛擬機類加載機制和字節(jié)碼執(zhí)行引擎重點關(guān)注運行時棧幀結(jié)構(gòu)局部變量表槽,操作數(shù)棧。 定論 問:finally語句一定會執(zhí)行嗎?答: 如果沒有執(zhí)行相應(yīng)的try語句則不會執(zhí)行。 在try語句中如果調(diào)用System.exit(0)方法則不會執(zhí)行。 問:finally...
摘要:棧的應(yīng)用前面介紹了那么多棧相關(guān)的知識,最后也是介紹棧的應(yīng)用場景的時候了,棧的實際應(yīng)用非常廣泛,例如用來存儲訪問過的任務(wù)或路徑撤銷的操作。 棧的定義 什么是棧?棧是一種遵循后進先出原則的有序集合,新添加的或者待刪除的元素都保存在棧的同一端,稱為棧頂,另一端稱為棧底,在棧里,新元素靠近棧頂,舊元素靠近棧底,用個圖來看大概這樣式的:showImg(https://segmentfault.c...
摘要:調(diào)用棧的運行機制機制程序運行到一個函數(shù),它就會將其添加到調(diào)用棧中,當(dāng)從這個函數(shù)返回的時候,就會將這個函數(shù)從調(diào)用棧中刪掉。在調(diào)用棧中每個調(diào)用偵都對應(yīng)一個函數(shù),最上方的調(diào)用幀稱為當(dāng)前幀,調(diào)用棧是由所有的調(diào)用偵形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 調(diào)用棧的英文名叫做Cal...
閱讀 1087·2021-10-08 10:04
閱讀 3525·2021-08-05 10:01
閱讀 2283·2019-08-30 11:04
閱讀 1802·2019-08-29 15:29
閱讀 848·2019-08-29 15:12
閱讀 1674·2019-08-26 12:11
閱讀 3122·2019-08-26 11:33
閱讀 1167·2019-08-26 10:23