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