由於是個新手,因此都是最簡單的知識學習梳理。git
數組是計算機科學中最經常使用的數據結構,是數據元素的集合。有時候咱們須要一種添加或者刪除元素時更可控的數據結構,他們就是隊列和棧。數組
隊列是聽從先進先出(FIFO)原則的一組有序的項,隊列在尾部添加新元素,並從頂部移除元素。這裏不先詳細說明。數據結構
棧是一種聽從後進先出(LIFO)原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱做棧頂,另外一端叫作棧底。新元素都在棧頂。學習
棧也被用在編譯語言的編譯器和內存中保存變量、方法調用等。this
棧的建立spa
建立一個類來表示棧。code
function Stack() { //各類屬性和方法的聲明 }
須要一種數據結構來保存棧裏的元素,這裏選擇數組。隊列
var items = [];
棧的基本操做內存
入棧方法:添加元素到棧,這裏要注意添加到棧的元素只能到棧頂,也就是棧的末尾。element
this.push = function (element) { items.push(element); }
出棧方法:移除棧裏的元素,注意移除的是最後添加進去的元素。
this.pop = function () { return items.pop(); }
對於棧來講只能用push和pop方法來進行添加和刪除元素。
獲取棧頂元素:咱們想知道最後添加的元素是什麼
this.peek = function () { return items[items.length - 1]; }
別忘了這裏咱們使用數組來存儲棧內的元素
判斷棧空:棧爲空返回true。
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
下一篇簡單的學習隊列。。。。