栈的数组实现

数组与链表堆栈和队列还有串等等都是数据结构里的逻辑结构当中线性结构的具体表现。其中堆栈队列可以算的上运算受限的线性表,今天来实现一个栈的数组实现。

package MyDS;
/** @author:micro_hz 2015年8月10日 */
public class Stack {
    public static void main(String args[])
    {
        MyStack ms = new MyArrayStack();
        //判断是否为空
        System.out.println(ms.isempty());
        //入栈
        ms.push(new Integer(1));
        ms.push(new Integer(2));
        ms.push(new Integer(3));
        ms.push(new Integer(4));
        //判断是否为空
        System.out.println(ms.isempty());
        //出栈
        ms.pop();
        //打印
        System.out.println(ms.toString());

    }
}
//定义一个接口
interface MyStack
{
    /* * 判断为空 */
    boolean isempty();
    /* * 插入节点 */
    void push(Object ob);
    /* * 取栈顶 */
    Object pop();
    /* * 清空栈 */
    void clear();
    /* * 求长度 */
    int getSize();

    }

//数组实现栈
class MyArrayStack implements MyStack
{
    int size = 0;
    Object[] objs = new Object[20];
    @Override
    public boolean isempty() {
        // TODO Auto-generated method stub
        return size == 0?true:false;
    }
    @Override
    public void push(Object ob) {
        // TODO Auto-generated method stub
        //判断是否需要扩容
        if(size > objs.length)
        {
            resize();
        }
        objs[size ++] = ob;
    }

    @Override
    public Object pop() {
        // TODO Auto-generated method stub
        if(size == 0)
        {
            return null;
        }
        return objs[size --];

    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        for (int i = 0; i < objs.length; i++) {
            objs[i] = null;
        }
        size = 0;
    }

    @Override
    public int getSize() {
        // TODO Auto-generated method stub
        return size;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        StringBuilder sb = new StringBuilder();
        sb.append("栈从栈底到栈顶的元素为:[");
        for(int i = 0;i < size;i ++)
        {
            sb.append(objs[i].toString());
            if(i != size - 1)
            {
                sb.append(",");
            }
        }
        return sb.append("]").toString();
    }
    void resize()
    {
        Object[] temp = new Object[size * 2];
        for (int i = 0; i < objs.length; i++) {
            temp[i] = objs[i];
            objs[i] = null;
        }
        objs = temp;
    }   
    }

参考文章

你可能感兴趣的:(数据结构,栈,线性表)