栈的实现

来源:互联网 发布:csgo淘宝买饰品 编辑:程序博客网 时间:2024/06/06 05:11

    • 1栈的数组实现

1、栈的数组实现

package cn.zhuang.stack;/** * 栈的ADT实现,数组栈 * @author zhuang */public class ArrayStack<E> {    private E[] data;//对象数组    private int top;//栈顶位置    //默认构造函数,初始数组容量为10    public ArrayStack(){        data = (E[]) new Object[10];        top = -1;    }    //自定义数组容量    public ArrayStack(int initialCapacity){        if(initialCapacity < 0){            throw new IllegalArgumentException("初始容量太小");        }        data = (E[]) new Object[initialCapacity];        top = -1;    }    //得到栈的数据大小    public int getSize(){        return top+1;    }    //是否为空    public boolean isEmpty(){        return (top == -1);    }    public E peek(){        if(top == -1){            throw new IllegalArgumentException("栈容量为空");        }        return data[top];    }    public void push(E item){        if(top == data.length - 1){            //容量已满,增加一倍            // 复制数组,参数如下:            //src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。            E[] newArray = (E[]) new Object[data.length*2];            System.arraycopy(data, 0, newArray, 0, data.length);            data = newArray;//新复制数组,容量为原来二倍,并给data        }        top++;        data[top] = item;    }    public E pop(){        E temp;        if(top == -1){            throw new IllegalArgumentException("栈容量为空!");        }        temp = data[top];        data[top] = null;//当数据类型为Object的时候才需要        top--;        return temp;    }}
0 0
原创粉丝点击