1. 程式人生 > >十三 用鏈表實現棧

十三 用鏈表實現棧

pre st2 用例 art ima rcv int opc d+

用鏈表實現棧:

技術分享圖片

鏈表棧:

package com.lt.datastructure.stackqueue;
/*
 * 使用鏈表實現棧
 */
public class LinkedListStack<E> implements Stack<E> {
    LinkedList<E> list;
    LinkedListStack(){
        list = new LinkedList<>();
    }
    
    @Override
    public int getsize() {
        return
list.getSize(); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public void push(E e) { list.addFirst(e); } @Override public E pop() { return list.removeFirst(); } @Override public E peek() {
return list.getFirst(); } @Override public String toString() { StringBuilder res = new StringBuilder(); //棧頂 res.append("Stack:top "); res.append(list); return res.toString(); } public static void main(String[] args) { LinkedListStack
<Integer> stack = new LinkedListStack<>(); for(int i=0; i<5; i++){ stack.push(i); System.out.println(stack); } stack.pop(); System.out.println("pop: \n"+stack); } }

測試:

技術分享圖片

和數組棧比較:

測試用例:

package com.lt.datastructure.stackqueue;

import java.util.Random;

public class Main {

    // 測試使用stack運行opCount個push和pop操作所需要的時間,單位:秒
    private static double testStack(Stack<Integer> stack, int opCount){

        long startTime = System.nanoTime();

        Random random = new Random();
        for(int i = 0 ; i < opCount ; i ++)
            stack.push(random.nextInt(Integer.MAX_VALUE));
        for(int i = 0 ; i < opCount ; i ++)
            stack.pop();

        long endTime = System.nanoTime();

        return (endTime - startTime) / 1000000000.0;
    }

    public static void main(String[] args) {

        int opCount = 100000;

        ArrayStack<Integer> arrayStack = new ArrayStack<>();
        double time1 = testStack(arrayStack, opCount);
        System.out.println("ArrayStack, time: " + time1 + " s");

        LinkedListStack<Integer> linkedListStack = new LinkedListStack<>();
        double time2 = testStack(linkedListStack, opCount);
        System.out.println("LinkedListStack, time: " + time2 + " s");

        // 其實這個時間比較很復雜,因為LinkedListStack中包含更多的new操作
    }
}

測試結果:鏈表棧比數組棧快一些,但沒有復雜度上的巨大差異

技術分享圖片

十三 用鏈表實現棧