泛型自定义栈
前言
栈(Stack)是一种用于存储数据的简单数据结构,是一种特殊的线性表,是一种后入先出的数据结构,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop),若栈中没有任何元素,则称为空栈。
具体实现
- 接口
public interface Stack<T> {
/**
* 添加元素
* @param t
*/
void push (T t);
/**
* 元素出栈
* @return
*/
T pop();
/**
* 查看栈顶元素
* @return
*/
T peek();
/**
* 获取大小
* @return
*/
int getSize();
/**
* 是否为空
* @return
*/
boolean isEmpty();
}
- 实现类
public class ArrayStack<T> implements Stack<T> {
Array<T> data;
public ArrayStack (int capacity) {
data = new Array<>(capacity);
}
public ArrayStack () {
data = new Array<>();
}
/**
* 获取容量
* @return
*/
public int getCapacity () {
return data.getCapacity();
}
/**
* 添加元素
* @param t
*/
@Override
public void push(T t) {
data.addLast(t);
}
/**
* 元素出栈
* @return
*/
@Override
public T pop() {
return data.removeLast();
}
/**
* 获取栈顶元素
* @return
*/
@Override
public T peek() {
return data.getLast();
}
/**
* 获取大小
* @return
*/
@Override
public int getSize() {
return data.getSize();
}
/**
* 是否为空
* @return
*/
@Override
public boolean isEmpty() {
return data.isEmpty();
}
/**
* 重写toString方法
* @return
*/
@Override
public String toString () {
StringBuilder resp = new StringBuilder();
resp.append("Stack: [");
for (int i = 0; i < data.getSize(); i ++) {
resp.append(data.get(i));
if (i != data.getSize() - 1) {
resp.append(",");
}
}
resp.append("] top");
return resp.toString();
}
public static void main(String[] args) {
ArrayStack<Integer> arrayStack = new ArrayStack<>();
for (int i = 0; i < 5; i++) {
arrayStack.push(i);
System.out.println(arrayStack);
}
arrayStack.pop();
System.out.println(arrayStack);
}
}
Array
是上一节实现的泛型动态数组