编写Java代码实现顺序栈 ?
参考答案:
顺序栈是一种基于数组实现的栈,它的主要操作包括入栈(push)、出栈(pop)、查看栈顶元素(peek)以及判断栈是否为空(isEmpty)。下面是一个简单的顺序栈的Java实现:
public class ArrayStack<T> {
private T[] elements;
private int count;
private int capacityIncrement;
public ArrayStack(int capacityIncrement) {
this.capacityIncrement = capacityIncrement;
elements = (T[]) new Object[capacityIncrement];
count = 0;
}
public void push(T element) {
ensureCapacity();
elements[count] = element;
count++;
}
public T pop() {
if (count == 0) {
throw new RuntimeException("Stack is empty");
}
count--;
T item = elements[count];
elements[count] = null;
return item;
}
public T peek() {
if (count == 0) {
throw new RuntimeException("Stack is empty");
}
return elements[count - 1];
}
public boolean isEmpty() {
return count == 0;
}
private void ensureCapacity() {
if (count == elements.length) {
resize(2 * count + capacityIncrement);
}
}
private void resize(int newSize) {
T[] newElements = (T[]) new Object[newSize];
System.arraycopy(elements, 0, newElements, 0, count);
elements = newElements;
}
}
在这个实现中,我们使用了一个泛型数组来存储栈中的元素,count
变量来记录栈中当前元素的数量,capacityIncrement
变量用于控制每次扩容时增加的元素数量。
push
方法用于向栈中添加一个新元素,pop
方法用于从栈中移除并返回栈顶元素,peek
方法用于返回栈顶元素但不移除它,isEmpty
方法用于判断栈是否为空。
ensureCapacity
方法用于检查栈是否已满,如果已满则进行扩容,resize
方法用于进行实际的扩容操作,它创建了一个新的数组,并将原数组中的元素复制到新数组中。
请注意,这个实现并没有处理类型安全问题,即它允许向栈中添加任何类型的对象,这可能会导致运行时错误。在实际应用中,你可能需要根据具体需求对这个实现进行修改,例如通过添加类型参数来限制栈中元素的类型。