Java:基於LinkedList實現棧和隊列


1.提供一組棧的接口,其底層關聯到一個LinkedList(雙端隊列)實例。由於只暴露部分基於棧實現的接口,所以可以提供安全的棧實現。

package junit;

import java.util.LinkedList;

/**
 * 用LinkedList實現棧
 * 
 * 隊列和棧區別:隊列先進先出,棧先進后出。
 * 
 * @author 林計欽
 * @version 1.0 Sep 5, 2013 11:24:34 PM
 */
public class Stack<T> {
    private LinkedList<T> storage = new LinkedList<T>();

    /** 入棧 */
    public void push(T v) {
        storage.addFirst(v);
    }

    /** 出棧,但不刪除 */
    public T peek() {
        return storage.getFirst();
    }

    /** 出棧,刪除 */
    public T pop() {
        return storage.removeFirst();
    }

    /** 棧是否為空 */
    public boolean empty() {
        return storage.isEmpty();
    }

    /** 打印棧元素 */
    public String toString() {
        return storage.toString();
    }
    
    public static void main(String[] args) {
        Stack stack=new Stack<String>();
        stack.push("a");
        stack.push("b");
        stack.push("c");
        //[c, b, a]
        System.out.println(stack.toString());
        //c--[c, b, a]
        Object obj=stack.peek();
        System.out.println(obj+"--"+stack.toString());
        obj=stack.pop();
        //c--[b, a]
        System.out.println(obj+"--"+stack.toString());
        //false
        System.out.println(stack.empty());
    }
}

2.使用java.util.Queue接口,其底層關聯到一個LinkedList(雙端隊列)實例。由於只暴露部分基於隊列實現的接口,所以可以提供安全的隊列實現。

package junit;

import java.util.LinkedList;
import java.util.Queue;

/**   
 *  用LinkedList實現隊列
 *  
 *  隊列和棧區別:隊列先進先出,棧先進后出。
 *
 * @author 林計欽
 * @version 1.0 Sep 5, 2013 11:26:45 PM   
 */
public class MyQueue<T> {
    private Queue<T> storage = new LinkedList<T>();

    /** 將指定的元素插入隊尾 */
    public void offer(T v) {
        storage.offer(v);
    }

    /** 檢索,但是不移除隊列的頭,如果此隊列為空,則返回 null */
    public T peek() {
        return storage.peek();
    }

    /** 檢索,但是不移除此隊列的頭 */
    /** 此方法與 peek 方法的惟一不同是,如果此隊列為空,它會拋出一個異常 */
    public T element() {
        return storage.element();
    }

    /** 檢索並移除此隊列的頭,如果隊列為空,則返回 null */
    public T poll() {
        return storage.poll();
    }

    /** 檢索並移除此隊列的頭 */
    /** 此方法與 poll 方法的不同在於,如果此隊列為空,它會拋出一個異常 */
    public T remove() {
        return storage.remove();
    }

    /** 隊列是否為空 */
    public boolean empty() {
        return storage.isEmpty();
    }

    /** 打印隊列元素 */
    public String toString() {
        return storage.toString();
    }
    
    public static void main(String[] args) {
        MyQueue stack=new MyQueue<String>();
        stack.offer("a");
        stack.offer("b");
        stack.offer("c");
        //[a, b, c]
        System.out.println(stack.toString());
        
        Object obj=stack.peek();
        // a--[a, b, c]
        System.out.println(obj+"--"+stack.toString());
        obj=stack.element();
        // a--[a, b, c]
        System.out.println(obj+"--"+stack.toString());
        obj=stack.poll();
        //a--[b, c]
        System.out.println(obj+"--"+stack.toString());
        obj=stack.remove();
        //b--[c]
        System.out.println(obj+"--"+stack.toString());
        //false
        System.out.println(stack.empty());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM