本文章介绍栈,以数组为底层结构完成栈代码的编写。
什么是栈:栈表示一种先进后出的数据结构,并且栈只允许访问一个数据项,即最后插入的数据项,就是栈顶的数据项,栈顶后面的数据项必须把栈顶的元素移除后,才能访问。
首先创建一个Stack接口,支持泛型,其中定义以下类:
getSize:查看栈中元素的个数
isEmpty: 查看栈是否为空
pop: 拿出栈顶的元素
peek : 查看栈顶元素
push :入栈,向栈中添加一个元素
package Stack;
public interface Stack <E>{
int getSize();
boolean isEmpty();
E pop();
E peek();
void push(E e);
}
定义ArrayStack类支持泛型,面向接口Stack编程,以下代码是ArrayStack类的构造方法。
第一个构造方法,传入指定参数,在内存中开辟容量为capacity容量的数组
第二个无参数构造方法,默认初始容量为10.
其中Array类参考:https://blog.csdn.net/qq_44313091/article/details/97539644
public class ArrayStack<E> implements Stack<E>{
Array<E> array;
public ArrayStack(int capacity) {
array =new Array<>(capacity);
}
public ArrayStack() {
array =new Array<>(10);
}}
以下方法实现接口中的所有类
@Override
public int getSize() {
return array.getsize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
@Override
public void push(E e) {
array.addLast(e);
}
@Override
public E pop () {
return array.removeLast();
}
@Override
public E peek () {
return array.getLast();
}
最后重写了toString方法
@Override
public String 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();
}