數據結構之「棧」

什麼是棧?

棧 是一種抽象的數據結構,只容許在有序線性數據集合的一段進行入棧和出棧操做,所以是按照後進先出(LIFO, Last In First Out)的原理操做元素。容許進行入棧和出棧的一端稱爲棧頂(TOP),另外一端稱爲棧底(BOTTOM)。棧頂會隨出棧入棧浮動的,當棧中元素個數爲零時稱爲空棧。java

棧經常使用一維數組或鏈表來實現。算法

棧的特色:
先進後出,後入先出。
除頭尾節點外,每一個元素有一個前驅節點,一個後繼節點。數組

棧

棧有什麼做用?

因爲棧結構是後進先出原則,經常使用於程序裏的遞歸,函數調用,局部變量臨時存儲,瀏覽器裏的前進後。在大話數據結構和算法一書中舉例特形象,手槍的彈夾就是棧的典型使用,裝彈其實就是入棧操做,開槍其實就是出棧操做。瀏覽器

棧該怎麼使用?

我用一維數組來簡單實現入棧出棧。
棧的存儲結構微信

public class Stack {
    //存儲元素
    Object[] elementData;
    //元素個數
    int elementCount;
}

入棧數據結構

public E push(E item) {
    //須要的最小容量是當前元素總數 + 1
    int minCapacity = elementCount + 1;
    //假如最小須要元素總數大於數組長度,這擴容一倍
    if (minCapacity - elementData.length > 0) {
        int newCapacity = minCapacity * 2;
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
    //給元素總數加一併把元素賦值給數組
    elementData[elementCount++] = item;
}

出棧數據結構和算法

public E pop() {
    //獲取元素總數
    int len = elementCount;
    //獲取棧頂元素
    E obj = (E) elementData[len - 1];
    //元素減一
    elementCount--;
    //置空
    elementData[elementCount] = null;
}

總結

棧 在計算機的世界裏是一個很是經常使用的數據結構,函數調用的存儲和函數裏分配的局部變量都用棧結構來存儲的。瀏覽器裏的前進和後退也就是一個入棧和出棧的操做。這裏是用數組的方式來做爲棧的存儲結構,有興趣的朋友能夠用鏈表的方式來實現棧結構。函數

PS:
清山綠水始於塵,博學多識貴於勤。
我有酒,你有故事嗎?
微信公衆號:「清塵閒聊」。
歡迎一塊兒談天說地,聊代碼。spa

相關文章
相關標籤/搜索