一、接口的定义
package p1.接口;
public interface Stack<E> extends Iterable<E> {
//返回栈中元素的个数
public int size();
//查看栈对否为空
public boolean isEmpty();
//入栈 进栈一个元素 在线性表的表尾添加一个元素
public void push(E element);
//出栈 弹出一个元素 在线性表的表尾删除一个元素
public E pop();
//查看当前栈顶元素 并不是移除 查看线性表中最后一个元素
public E peek();
//清空栈
public void clear();
}
二、接口的实现
(1)导入Stack接口,import p1.接口.Stack;
(2)基本组成的定义;
private ArrayList<E> list;
public ArrayStack() {
list = new ArrayList<>();
}
public ArrayStack(int capacity) {
list = new ArrayList<>(capacity);
}
(3)返回栈中元素的个数
利用size()方法获取并返回
@Override
public int size() {
return list.size();
}
(4)查看栈对否为空
利用isEmpty()方法返回
@Override
public boolean isEmpty() {
return list.isEmpty();
}
(5)入栈 进栈一个元素 在线性表的表尾添加一个元素
利用add()直接添加
@Override
public void push(E element) {
list.add(element);
}
(6)出栈 弹出一个元素 在线性表的表尾删除一个元素
因为删除表尾的元素,所以利用size()-1找到线性表的最后一个元素角标采用 remove(index)的方法移除。
@Override
public E pop() {
return list.remove(list.size() - 1);
}
(7)查看当前栈顶元素 并不是移除 查看线性表中最后一个元素
因为查看表尾的元素,所以利用size()-1找到线性表的最后一个元素角标采用 get(index)的方法获取。
@Override
public E peek() {
return list.get(list.size() - 1);
}
(8)清空栈
采用list.clear()
@Override
public void clear() {
list.clear();
}
(9) toSting(),iterator(),equals()
均通过list对应的方法实现
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public String toString() {
return list.toString();
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (this == o) {
return true;
}
if (o instanceof ArrayStack) {
ArrayStack other = (ArrayStack) o;
return this.list.equals(other.list);
}
return false;
}
三、测试类
导入实现类:import p2.线性结构.ArrayStack;
测试部分接口是否正常;
package p0.测试;
import p2.线性结构.ArrayStack;
public class TestArrayStack {
public static void main(String[] args) {
ArrayStack<Integer> stack01 = new ArrayStack<>();
ArrayStack<Integer> stack02 = new ArrayStack<>(15);
for (int i = 1; i <= 12; i++) {
stack01.push(i);
stack02.push(i);
}
System.out.println(stack01);
System.out.println(stack02);
System.out.println(stack01.equals(stack02));
System.out.println(stack01.pop());
System.out.println(stack01);
System.out.println(stack01.peek());
}
}
输出结果:
由图可知输出结果和预期设计结果相同