自定义ArrayStack
类,用数组实现一个栈:
public class ArrayStack {
// 栈的底层数组
private int[] stack;
// 栈顶元素的索引,初始化为-1表示栈为空
private int top;
// 栈的容量
private int capacity;
/**
* 构造函数,初始化栈的容量
* @param capacity 栈的容量
*/
public ArrayStack(int capacity) {
this.stack = new int[capacity]; // 分配指定容量的数组
this.top = -1; // 初始化栈顶索引为-1
this.capacity = capacity; // 设置栈的容量
}
/**
* 向栈中添加元素
* @param value 要添加的元素值
* @return 如果添加成功返回true,如果栈已满返回false
*/
public boolean push(int value) {
if (top == capacity - 1) {
// 检查栈是否已满
return false; // 如果栈已满,则无法添加新元素,返回false
}
stack[++top] = value; // 先将栈顶索引加1,然后将新元素放到栈顶
return true; // 添加成功,返回true
}
/**
* 从栈中移除并返回栈顶元素
* @return 如果栈不为空,返回栈顶元素;如果栈为空,返回null
*/
public Integer pop() {
if (top == -1) {
// 检查栈是否为空
return null; // 如果栈为空,则返回null
}
return stack[top--]; // 返回栈顶元素,并将栈顶索引减1
}
// 这里可以添加其他方法,如isEmpty(), isFull(), peek()等
/**
* 检查栈是否为空
* @return 如果栈为空返回true,否则返回false
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 检查栈是否已满
* @return 如果栈已满返回true,否则返回false
*/
public boolean isFull() {
return top == capacity - 1;
}
/**
* 获取栈顶元素但不移除它
* @return 如果栈不为空,返回栈顶元素;如果栈为空,返回null
*/
public Integer peek() {
if (top == -1) {
return null;
}
return stack[top];
}
}
在这个类中,我添加了isEmpty()
, isFull()
, 和 peek()
方法的实现,这些方法分别用于检查栈是否为空、是否已满,以及获取栈顶元素但不移除它。这些方法在栈的实现中非常常见,并且对于栈的操作来说非常有用。