使用数组的 Java 栈实现
原文: https://howtodoinjava.com/data-structure/java-stack-implementation-array/
本教程给出了使用数组实现栈数据结构的示例。 栈提供了将新对象放入栈(方法push()
)并从栈中获取对象(方法pop()
)。 栈根据后进先出(LIFO)返回对象。 请注意,JDK 提供了默认的 Java 栈实现作为类java.util.Stack
。
适用于所有栈实现的两个强制操作是:
push()
:将数据项放置在栈指针指向的位置。pop()
:在其中删除数据项并从栈指针指向的位置返回该数据项。
某些严重依赖栈的环境可能会根据要求提供其他操作。 Stack 最常见的用法是表达式求值和语法解析。 您也可以在文本处理器的撤消/重做操作中找到它们。
Java 栈实现源代码
下面的程序是栈数据结构的示例实现。 可以根据需要随意修改源代码。
package com.howtodoinjava.datastructure;
import java.util.Arrays;
public class CustomStack <E>
{
private int size = 0;
private static final int DEFAULT_CAPACITY = 10;
private Object elements[];
public CustomStack() {
elements = new Object[DEFAULT_CAPACITY];
}
public void push(E e) {
if (size == elements.length) {
ensureCapacity();
}
elements[size++] = e;
}
@SuppressWarnings("unchecked")
public E pop() {
E e = (E) elements[--size];
elements[size] = null;
return e;
}
private void ensureCapacity() {
int newSize = elements.length * 2;
elements = Arrays.copyOf(elements, newSize);
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append('[');
for(int i = 0; i < size ;i++) {
sb.append(elements[i].toString());
if(i < size-1){
sb.append(",");
}
}
sb.append(']');
return sb.toString();
}
}
现在,通过从栈中推送和弹出一些项目来测试我们的栈实现。
public class Main
{
public static void main(String[] args)
{
CustomStack<Integer> stack = new CustomStack<>();
stack.push(10);
stack.push(20);
stack.push(30);
stack.push(40);
System.out.println(stack);
System.out.println( stack.pop() );
System.out.println( stack.pop() );
System.out.println( stack.pop() );
System.out.println( stack );
}
}
Output:
[10,20,30,40]
40
30
20
[10]
这就是有关 Java 栈实现示例的简单但重要的概念。
学习愉快!