Java棧的執行個體-數組和鏈表兩種方法__java

來源:互聯網
上載者:User

一、棧

棧的定義
棧(Stack)是限制僅在表的一端進行插入和刪除運算的線性表。
(1)通常稱插入、刪除的這一端為棧頂 (Top),另一端稱為棧底 (Bottom)。
(2)當表中沒有元素時稱為空白棧。
(3)棧為後進先出(Last In First Out)的線性表,簡稱為 LIFO 表。
棧的修改是按後進先出的原則進行。每次刪除(退棧)的總是當前棧中"
最新"的元素,即最後插入(進棧)的元素,而最先插入的是被放在棧的底部,
要到最後才能刪除。 

2、棧的基本運算
(1) 判斷棧是否為空白 
    boolean isEmpty();      
(2)清空棧 
    void clear();  
(3)棧的長度 
    int length();     
(4)資料入棧 
    boolean push(T data);   
 (5)資料出棧 ,棧中刪除
    T pop();     
 (6)資料出棧 ,棧中不刪除

    T peek();


二、代碼編寫

1、介面類

package com.lin.stack;/** * 功能概要:棧的介面類 *  * @author linbingwen * @since  2015年8月29日  */public interface MyStack<T> {/** * 判斷棧是否為空白  * @author linbingwen * @since  2015年8月29日  * @return */    boolean isEmpty();          /**     * 清空棧      * @author linbingwen     * @since  2015年8月29日     */    void clear();       /**     * 棧的長度      * @author linbingwen     * @since  2015年8月29日      * @return     */    int length();         /**     * 資料入棧      * @author linbingwen     * @since  2015年8月29日      * @param data     * @return     */    boolean push(T data);       /**     * 資料出棧 ,棧中刪除     * @author linbingwen     * @since  2015年8月29日      * @return     */    T pop();          /**     * 資料出棧 ,棧中不刪除     * @author linbingwen     * @since  2015年8月29日      * @return     */    T peek();    }



2、數組實現棧

package com.lin.stack;/** * 功能概要:數組實現棧 *  * @author linbingwen * @since  2015年8月29日  */public class MyArrayStack<T> implements MyStack<T> {private Object[] objs = new Object[16];  private int size;@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic void clear() {    for (int i = 0; i < objs.length; i++) {objs[i] = null;    size--;}}@Overridepublic int length() {return size;}@Overridepublic boolean push(T data) {if(size == (objs.length-1)){Object[] temp = new Object[objs.length*2]; for (int i = 0; i < objs.length; i++) {    temp[i]=objs[i];} objs= temp;}objs[size++]=data;return true;}@Override@SuppressWarnings("unchecked")  public T pop() {return size == 0?null:(T) objs[(size--)-1];}@Override@SuppressWarnings("unchecked")  public T peek() {return size == 0?null:(T) objs[size];}}

3、鏈表實現棧

package com.lin.stack;/** * 功能概要: *  * @author linbingwen * @since  2015年8月29日  */public class MyListStack<T> implements MyStack<T>{private int size;private Node top;class Node{T data;Node pre;}@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic void clear() {top = null;}@Overridepublic int length() {return size;}@Overridepublic boolean push(T data) {Node node = new Node();node.data=data;if( null == top){top = node;}else {node.pre = top;top =node;}size++;return true;}@Overridepublic T pop() {if(size == 0){return null;}T data = top.data;top = top.pre;size--;return data;}@Overridepublic T peek() {if(size == 0){return null;}T data = top.data;return data;}}

4、測試

package com.lin.stack;/** * 功能概要: *  * @author linbingwen * @since  2015年8月29日  */public class StackTest {/** * @author linbingwen * @since  2015年8月29日  * @param args     */public static void main(String[] args) {MyStack<Integer> myStack1 = new MyArrayStack<Integer>();MyStack<Integer> myStack2 = new MyListStack<Integer>();for(int i =0;i<30;i++){myStack1.push(i);myStack2.push(i);}System.out.println("數組實現的棧輸出如下 ");for(int j =0;j<30;j++){System.out.print(myStack1.pop()+"  ");}System.out.println();System.out.println("鏈表實現的棧輸出如下 ");for(int k =0;k<30;k++){System.out.print(myStack2.pop()+"  ");}}}

輸出結果如下:


或者 看這裡:

數組實現的棧輸出如下 
29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0  
鏈表實現的棧輸出如下 
29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.