栈是一种先进后出的线性数据结构,先进后出,只能观察到栈顶元素,利用上篇文章(https://blog.csdn.net/zhangjun62/article/details/82720572)实现的动态数组来实现底层栈的数据结构。首先创建了一个Stack接口类如下:
public interface Stack<E> {
int getSize(); //获取栈的大小
boolean isEmpty(); //判断栈是否为空
void push(E e); //入栈
E pop(); //出栈
E peek(); //获取栈顶元素
}
下面是利用动态数组实现栈
public class ArrayStack<E> implements Stack<E> { //实现Stack接口
private Array<E> array; //声明数组用来保存数据
public ArrayStack(int capacity){ //有参构造函数,根据传入容量创建相应大小的数组
array = new Array<>(capacity);
}
public ArrayStack(){ //无参构造函数,根据默认大小创建
array = new Array<>();
}
@Override
public int getSize(){ //返回栈的大小
return array.getSize();
}
@Override
public boolean isEmpty(){ //判断栈是否为空
return array.isEmpty();
}
public int getCapacity(){ //获取栈的容量
return array.getCapacity();
}
@Override
public void push(E e){ //向数组末尾添加元素,将数组末尾当作栈顶,即压栈操作
array.addLast(e);
}
@Override
public E pop(){ //出栈操作,将数组末尾元素删除,即将栈顶元素弹栈
return array.removeLast();
}
@Override
public E peek(){ //获取栈顶元素
return array.getLast();
}
@Override
public String toString(){ //为便于观察,重写toString方法
StringBuilder res = new StringBuilder();
res.append("Stack: ");
res.append('[');
for(int i = 0 ; i < array.getSize() ; i ++){
res.append(array.get(i));
if(i != array.getSize() - 1)
res.append(", ");
}
res.append("] Top");
return res.toString();
}
}
这就是栈的实现代码及过程,经测试能够实现相应功能