在Java中,堆栈(Stack)是一种后进先出(LIFO)的数据结构,通常用于管理方法调用、表达式求值等场景。下面是一个使用具有自动调整大小的默认整数数组的Java堆栈实现的示例。
public class DynamicArrayStack {
private int[] stackArray;
private int top;
private int capacity;
public DynamicArrayStack(int initialCapacity) {
this.capacity = initialCapacity;
this.stackArray = new int[initialCapacity];
this.top = -1;
}
public void push(int value) {
if (top == capacity - 1) {
resize(capacity * 2);
}
stackArray[++top] = value;
}
public int pop() {
if (isEmpty()) {
throw new IllegalStateException("Stack is empty");
}
int value = stackArray[top--];
if (top < capacity / 4 && capacity > initialCapacity) {
resize(capacity / 2);
}
return value;
}
public int peek() {
if (isEmpty()) {
throw new IllegalStateException("Stack is empty");
}
return stackArray[top];
}
public boolean isEmpty() {
return top == -1;
}
private void resize(int newCapacity) {
int[] newArray = new int[newCapacity];
System.arraycopy(stackArray, 0, newArray, 0, Math.min(capacity, newCapacity));
stackArray = newArray;
capacity = newCapacity;
}
public static void main(String[] args) {
DynamicArrayStack stack = new DynamicArrayStack(2);
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop()); // 输出 3
System.out.println(stack.peek()); // 输出 2
System.out.println(stack.isEmpty()); // 输出 false
}
}
push(int value)
:将元素压入堆栈,如果容量不足则自动扩展。pop()
:弹出堆栈顶部的元素,如果容量过大则自动收缩。peek()
:查看堆栈顶部的元素而不移除它。isEmpty()
:检查堆栈是否为空。resize(int newCapacity)
:调整堆栈数组的大小。通过这种方式实现的堆栈,可以有效地管理内存使用,同时保持良好的性能。
领取专属 10元无门槛券
手把手带您无忧上云