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为测试包
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());
}
}
上一篇: exit_hook劫持
下一篇: 学生成绩管理系统(C实现)