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

mac2025-07-23  6

用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为测试包

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

 

然后就可以进行单元测试啦,单元测试的好处就是方便,然后就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()); } }

 

最新回复(0)