JavaScript資料結構和演算法----棧

來源:互聯網
上載者:User

標籤:int   修改   length   bsp   ==   class   方法   刪除   floor   

前言 

  棧是一種遵循後進先出(LIFO)原則的有序集合,新添加的或待刪除的元素都儲存在棧的末尾,稱作棧頂,另外一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。可以想象桌上的一疊書,或者廚房裡的堆放的盤子。

 

一、棧的建立

可以建立一個類來表示棧

//1、建立一種資料結構來儲存棧裡面的資料,這裡選擇數組//2、聲明一些棧的方法    // push(element(s)) : 添加一個或一些元素到棧頂    // pop() : 移除棧頂的元素,同時返回被移除的元素。    // peek() : 返回棧頂的元素,僅僅是返回,不做任何修改。    // isEmpty() : 如果棧裡面沒有任何元素就返回true,否者為false。    // clear() : 清除棧裡面的元素。    // size() : 返回棧裡面的個數。function Stack(){        var items = [];    this.push = function(element){        items.push(element);    }    this.pop = function(){        return items.pop();    }    this.peek = function(){        return items[items.length-1];    }    this.isEmpty = function(){        return items.length == 0;    }    this.clear = function(){        items = [];    }    this.size = function(){        return items.length;    }    this.print = function(){        console.log(items.toString());    }    }//使用棧var stack = new Stack();console.log(stack.isEmpty());//truestack.push(100);stack.push(200);console.log(stack.isEmpty());//falseconsole.log(stack.size());//2console.log(stack.peek());stack.pop();stack.print();//100

 

二、棧的應用

十進位轉二進位

//演算法描述:將該十進位的數和2整除,或者每次的餘數(0或1),直到結果為0位置。比圖10的二進位為:    // 10/2 = 5 ,餘數 0     // 5/2 = 2  ,餘數 1    // 2/2 = 1  ,餘數 0    // 1/2 = 0  ,餘數 1    // 10的二進位表示為:0101
 function diviceBy2(decNumber){    var remStack = new Stack(),        rem,        binaryString = ‘‘;    while(decNumber > 0){        rem = Math.floor(decNumber%2);        remStack.push(rem);        decNumber = Math.floor(decNumber/2);    }    while(!remStack.isEmpty()){        binaryString += remStack.pop().toString();     }    return binaryString;}console.log(diviceBy2(10));   //1010console.log(diviceBy2(520));  //1000001000console.log(diviceBy2(1000)); //1111101000

 

十進位轉成其他進位

function diviceByBase(decNumber, base){    var remStack = new Stack(),        rem,        baseString = ‘‘,        digits = ‘0123456789ABCDEF‘;//8進位是餘數是(0-7)16進位是(0-9A-F)    while(decNumber > 0){        rem = Math.floor(decNumber % base);        remStack.push(rem);        decNumber = Math.floor(decNumber / base);    }    while(!remStack.isEmpty()){        baseString += digits[remStack.pop()];     }    return baseString;}console.log(diviceByBase(100345, 2));  // 11000011111111001console.log(diviceByBase(100345, 8));  // 303771console.log(diviceByBase(100345, 16)); // 187F9

  

  

 

  

JavaScript資料結構和演算法----棧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.