首页 > 代码库 > Java中栈结构的自我实现

Java中栈结构的自我实现

package com.pinjia.shop.common.collection;

/**
 * Created by wangwei on 2017/1/3.
 */
public class MyLinkedStack<T> {
    //定义节点数据结构
    private class Node{
        public T data;
        public Node next;
        public Node(){}
        public Node(T data,Node next){
            this.data = http://www.mamicode.com/data;"[]";
        else{
            StringBuilder sb = new StringBuilder("[");
            for(Node current = top;current != null;current = current.next){
                sb.append(current.data.toString()+", ");
            }
            int len = sb.length();
            return sb.delete(len-2,len).append("]").toString();
        }
    }
    public static void main(String[] args) {
        MyLinkedStack<String> stack = new MyLinkedStack<String>();
        // 不断地入栈
        stack.push("aaaa");
        stack.push("bbbb");
        stack.push("cccc");
        stack.push("dddd");
        System.out.println(stack);
        // 访问栈顶元素
        System.out.println("访问栈顶元素:" + stack.peek());
        // 弹出一个元素
        System.out.println("第一次弹出栈顶元素:" + stack.pop());
        // 再次弹出一个元素
        System.out.println("第二次弹出栈顶元素:" + stack.pop());
        System.out.println("两次pop之后的栈:" + stack);
    }
}

  

以下是基于数组的实现:

package com.pinjia.shop.common.collection;

/**
 * Created by wangwei on 2017/1/3.
 */
public class MyArrayStack<T> {
    private Object[] objs = new Object[16];
    private int size = 0;

    public boolean isEmpty() {
        return size == 0;
    }

    public void clear() {
        // 将数组中的数据置为null, 方便GC进行回收
        for (int i = 0; i < size; i++) {
            objs[size] = null;
        }
        size = 0;
    }

    public int length() {
        return size;
    }

    public boolean push(T data) {
        // 判断是否需要进行数组扩容
        if (size >= objs.length) {
            resize();
        }
        objs[size++] = data;
        return true;
    }

    /**
     * 数组扩容
     */
    private void resize() {
        Object[] temp = new Object[objs.length * 3 / 2 + 1];
        for (int i = 0; i < size; i++) {
            temp[i] = objs[i];
            objs[i] = null;
        }
        objs = temp;
    }

    public T pop() {
        if (size == 0) {
            return null;
        }
        return (T) objs[--size];
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("MyArrayStack: [");
        for (int i = 0; i < size; i++) {
            sb.append(objs[i].toString());
            if (i != size - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }

    public static void main(String[] args) {
        MyArrayStack<Integer> stack = new MyArrayStack<Integer>();
        stack.push(12);
        stack.push(13);
        System.out.println(stack.length());
        System.out.println(stack);
    }
}

  

Java中栈结构的自我实现