欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java用数组来模拟堆栈的基本方法

程序员文章站 2022-05-06 09:38:02
...

用java通过数组去模拟堆栈————

    一般来说,堆栈本身可以用静态数组结构或者动态链式表结构两种方式实现。

这里采用比较简单的数组方式

1.创建接口,通过接口去实现一系列堆栈方法

       栈的基本操作:

           1.1判断栈是否为空  在出栈之前,必须判断栈的状态是否为空。如果栈的状态为空,产生下溢错误

           1.2 判断栈是否已满  在入栈之前必须判断栈的状态是否已满,如果栈不满,则接收新数据元素入栈,否则产生上溢错误

           1.3 入栈

           1.4 出栈

            1.5 获得栈顶元素

        这里本该用泛型<T>去做,以增加代码的可扩展性,但是怎么都试不好,所以采用Integer类型

​
public interface Stack {
    /**文档注释:
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty();

    /**
     * 判断栈元素是否已满
     * @return
     */
    public boolean isFull();

    /**
     * 入栈
     * @return o 待添加的元素
     */
    public  boolean push(Integer o);//泛型类T 代表任意类型

    /**
     * 出栈
     * @return 栈顶元素
     */
    public Integer pop();

    /**
     * 获取栈顶元素
     * @return  栈顶元素
     */
    public Integer get();

}

​

2.实现接口

import org.omg.CORBA.Object;

public class ArrayStack implements Stack {
    private Integer[] arr;//在类中声明指定类型的数组
    private int top = -1;//指向栈顶的索引,初始为空栈

    public ArrayStack(int length) {
        //初始化数组,给定长度
        arr =  new Integer[length];  //不能直接转成泛型T
    }

    @Override
    public boolean isEmpty() {
        return top == -1;
    }

    @Override
    public boolean isFull() {
        return top == arr.length-1;
    }
    @Override
    public boolean push(Integer o) {
        if( isFull()){ //先判断栈是否已满
            System.out.println("栈已满");
            return false;
        }else{
            arr[++top] = o;
            return true;
        }
    }
    @Override
    public Integer pop() {
        if(isEmpty()){//先判断是否为空栈    Integer为对象 若为空栈返回null
            System.out.println("为空栈");
            return null;
        }else  return arr[top--];
    }

    @Override
    public Integer get() {
//        System.out.println(arr.length);
//        System.out.println(top);
        if(isEmpty()){return null;}
        else return arr[top];
    }
//重写toString方法
    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for(int i=0;i<=top;i++){
            sb.append(arr[i]).append(",");
        }
        sb.deleteCharAt(sb.length()-1);
        sb.append("]");
        return sb.toString();
    }
}

进行测试

使用单元测试: 步骤1.在scr下创建test包,并指明test为测试包

java用数组来模拟堆栈的基本方法

2.在注解旁边Alt+enter 将包引入项目(那几个应该都能用)

java用数组来模拟堆栈的基本方法

 

然后就可以进行单元测试啦,单元测试的好处就是方便,然后就ok了

 

public class ArrayStackTest {
    Stack stack;
    /**
     * 单元测试
     */
    @Before //在测试方法运行之前运行
    public void init(){
         stack = new ArrayStack(5);
    }
    @Test
    public void testPush(){

        stack.push(1);
        stack.push(2);
        System.out.println(stack);
        System.out.println(stack.pop());
        System.out.println(stack);
        System.out.println(stack.get());
        System.out.println(stack);
        System.out.println(stack.isFull());
    }
    @Test
    public void testisEmpty(){
        System.out.println(stack.isEmpty());

    }

    @Test
    public void testifFull(){
        System.out.println(stack.isFull());
    }
}

 

相关标签: 堆栈