資料結構與演算法JavaScript描述——棧

來源:互聯網
上載者:User

標籤:++   class   訪問   多少   記錄   需要   測試   函數   元素   

棧就是和列表類似的一種資料結構,它可用來解決電腦世界裡的很多問題。棧是一種高效的資料結構,因為資料只能在棧頂添加或刪除,所以這樣的操作很快,而且容易實現。棧的使用遍布程式語言實現的方方面面,從運算式求值到處理函數調用。 1.對棧的操作:                                        棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。棧被稱為一種後入先出的資料結構。由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元素,必須先拿掉上面的元素。對棧的兩種主要操作是將一個元素壓入棧和將一個元素彈出棧。入棧使用push() 方法,出棧使用pop() 方法。另一個常用的操作是預覽棧頂的元素。pop() 方法雖然可以訪問棧頂的元素,但是調用該方法後,棧頂元素也從棧中被永久性地刪除了。peek() 方法則只返回棧頂元素,而不刪除它。 為了記錄棧頂元素的位置,同時也為了標記哪裡可以加入新元素,我們使用變數top當向棧內壓入元素時,該變數增大;從棧內彈出元素時,該變數減小。push()、pop() 和peek() 是棧的3 個主要方法,但是棧還有其他方法和屬性。clear() 方法清除棧內所有元素,length 屬性記錄棧內元素的個數。我們還定義了一個empty 屬性,用以表示棧內是否含有元素,不過使用length 屬性也可以達到同樣的目的。 2.棧的實現:實現一個棧,當務之急是決定儲存資料的底層資料結構。這裡採用的是數組。 代碼:
<script type="text/javascript">/***    用數組dataStore 儲存棧內元素,建構函式將其初始化為一個空數組。*     變數top 記錄棧頂位置 被建構函式初始化為0,表示棧頂對應數組的起始位置0。*   如果有元素被壓入棧,該變數的值將隨之變化。*/function Stack(){    this.dataStore = [];    this.top = 0;    this.push = push;    this.pop = pop;    this.peek = peek;    this.clear = clear;    this.length = length;}function push(element){    this.dataStore[this.top] = element;    this.top ++;}function pop(){    this.top --;    return this.dataStore[this.top];}/*** 返回數組的第top-1 個位置的元素,即棧頂元素*/function peek(){    return this.dataStore[this.top - 1];}/*** 有時候需要知道棧記憶體儲了多少個元素。* length() 方法通過返回變數top 值的方式返回棧內的元素個數:*/function length(){    return this.top;}/*** 可以將變數top 的值設為0,輕鬆清空一個棧:*/function clear() {    this.top = 0;}//測試代碼//倒數第二行返回undefined,這是因為棧被清空後,棧頂就沒值了,這時使用peek() 方法預覽棧頂元素,自然得到undefined。var s = new Stack();s.push("David");s.push("Raymond");s.push("Bryan");console.log("length: " + s.length());                            //length: 3console.log(s.peek());                                            //Bryanvar popped = s.pop();console.log("The popped element is: " + popped);                //The popped element is: Bryanconsole.log(s.peek());                                            //Raymonds.push("Cynthia");console.log(s.peek());                                            //Cynthias.clear();    console.log("length: " + s.length());                            //length: 0console.log(s.peek());                                            //undefineds.push("Clayton");    console.log(s.peek());                                            //Clayton</script>

 

    

資料結構與演算法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.