数据结构2—Java_栈_顺序存储

来源:互联网 发布:淘宝网药店购药 编辑:程序博客网 时间:2024/06/10 14:28

一、定义接口

package Statck;public interface IStatck<T> {    /**     * 压栈     * @param t     */    public void push(T t);    /**     * 弹栈     */    public T Pop();    /**     * 返回元素个数     * @return     */    public int StackLength();    /**     * 清空栈     */    public void ClearStack();}

二、自定义类

package Statck;public class MStack<T> implements IStatck<T> {    private int top=-1;    Object[] objArray ;    int MAX;    /**     * 构造函数,初始化数组大小     * @param n     */    MStack(int n){        MAX=n;        objArray = new Object[MAX];    }    /**     * 压栈     */    @Override    public void push(T t) {        if(top>=MAX-1){//top==Max-1时满栈            throw new RuntimeException("超出栈上线");        }else{            top++;            objArray[top]=t;        }           }    /**     * 弹栈     */    @Override    public T Pop() {        if(top==-1){            throw new RuntimeException("空栈,无法弹出元素");            }else{            T t =(T)objArray[top];            top--;            return t;        }       }    /**     * 长度     */    @Override    public int StackLength() {        return top+1;    }    @Override    public void ClearStack() {        if(top>-1){            for(int i=0;i<top;i++){                 objArray[i]=null;            }        }    }   }

三、测试代码

package Statck;import java.util.Random;public class TestStack {    MStack<Integer> stack ;    final int MAXVALUE=15;    Random r = new Random();    public static void main(String[] args){        TestStack ts = new TestStack();        ts.initStack(10);        ts.pushData();    }    /**     * 初始化,     * @param length 栈长度     */    private void initStack(int length){        stack = new MStack<Integer>(length);    }    /**     * 压栈——弹栈——显示     */    private void pushData(){        int length = Math.abs(r.nextInt(MAXVALUE));//Math.abs()取绝对值        try{            System.out.println("压入元素:");            for(int i=0;i<length;i++){                int j =  Math.abs(r.nextInt(MAXVALUE));                System.out.print(" "+j);                stack.push(j);                                  }        }catch(Exception e){System.out.println(e.toString());}        showStackData(stack);    }    /**     * 显示     * @param stack     */    private void showStackData(MStack<Integer> stack){        System.out.println("");        System.out.println("栈长:"+stack.StackLength());        System.out.println("栈内元素为(出栈顺序):");        int length = stack.StackLength();        for(int i=0;i<length;i++){            System.out.print(" "+stack.Pop());        }                   }}

四、测试结果

压入元素:
13 10 3 3 9 7 3 12 4 10 10java.lang.RuntimeException: 超出栈上线

栈长:10
栈内元素为(出栈顺序):
10 4 12 3 7 9 3 3 10 13

top来指示栈顶元素在数组中的位置,top初始值为-1,表示栈为空,top=0表示已经有一个元素
(top==MAXSIZE-1)为栈满标志

0 0
原创粉丝点击