计算机中中的栈是一种特殊的线性表,限定只在表尾进行添加和删除操作,,我们把允许进行增删操作的一端称为栈顶,另一端称为栈底。
我们把在表尾添加元素叫做压栈、进栈或入栈,删除元素叫做出栈、弹栈。
栈遵循后进先出的规则。
下面是模拟API中栈的一个栈的接口
public interface Stack <E> extends Iterable<E> {
//有效数据(存储的元素)个数
public int size();
public boolean isEmpty();
//压栈
public void push(E element);
//查看栈顶元素
public E peek();
//弹栈,并返回栈顶元素(即弹出的元素)
public E pop();
public void clear();
}
以下是在线性表的基础上写的一个栈的基本底层操作:
public class ArrayStack<E> implements Stack<E> {
private ArrayList<E> list;
public ArrayStack(){
list = new ArrayList<E>();
}
@Override
public int size() {
return list.size();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
//栈在线性表尾部添加元素,直接调用ArrayList的add方法在表尾添加元素即可
@Override
public void push(E element) {
list.add(element);
}
//查看栈顶元素,即查看表尾元素
@Override
public E peek() {
return (E) list.get(size()-1);
}
//弹栈,即删除表尾元素
@Override
public E pop() {
return list.remove(size()-1);
}
@Override
public void clear() {
list.clear();
}
@Override
public boolean equals(Object o) {
if(o == null){
return false;
}
if(o == this){
return true;
}
if(o instanceof ArrayStack){
ArrayStack other = (ArrayStack) o;
return list.equals(other.list);
}
return false;
}
@Override
public Iterator iterator() {
return list.iterator();
}
}