栈 的java实现

来源:互联网 发布:数据处理作图软件 编辑:程序博客网 时间:2024/06/04 19:05

栈的java实现,链栈的实现,其节点的声明方式,与结构体不大相同,只一点需要注意,还有泛型的擦除。使用泛型时,对泛型是不分配内存空间的 ,只是栈中引用指向他,使用new 分配空间的都会在堆中。

/** *数组栈的java实现 */class ArrayStack<AnyType>{private static final int DEFAULT_CAPACITY=10;AnyType []array;int size;int topStack;public ArrayStack(){clear();size=0;}public void push(AnyType x){array[++topStack]=x;size++;}/** * 再取出栈顶元素时先判断是否为空; */public AnyType top(){if(topStack==-1)return null; return array[topStack];}public AnyType pop(){if(topStack==-1)return null;size--;return array[topStack--];}public void clear(){topStack=-1;ensureCapacity(DEFAULT_CAPACITY);}private void ensureCapacity(int defaultCapacity){if(size>defaultCapacity)return ;//注意这里只能够创建object类型,然后再强制类型转换,因为泛型有类型//擦除,用new T创建了 也不知道T的确切类型,不能识别AnyType        AnyType newArray[]=(AnyType[])new Object[defaultCapacity];        for(int i=0;i<size;i++)        newArray[i]=array[i];        array=newArray;}public int size(){return size;}}class LinkedStack<AnyType>{private static class Node<AnyType>{public AnyType e;public Node<AnyType> pre;public Node(AnyType e,Node<AnyType> pre){this.e=e;this.pre=pre;}}private Node<AnyType> top;    int size;public  LinkedStack(){clear();}public void clear(){size=0;top=new Node<AnyType>(null,null);}public AnyType top(){return top.e;}public void push(AnyType e){top=new Node<AnyType>(e, top);size++;}public  int size(){return size;}public AnyType pop(){if(isEmpty())return null;AnyType a=top.e;size--;top=top.pre;return a;}public boolean isEmpty(){if(size==0)return true;return false;}}public class TestStack {    public static void main(String args[])    {    LinkedStack<Integer>a=new LinkedStack<Integer>();    a.push(2);    a.push(3);    a.push(4);    System.out.println(a.size()+" ");    System.out.println(a.pop()+" ");    System.out.println(a.size()+" ");    }


0 0