本教程给出了使用Array 实现Stack数据结构的示例。堆栈提供将新对象放在堆栈上(方法push())并从堆栈中获取对象(方法pop())。堆栈根据后进先出(LIFO)返回对象。请注意,JDK提供了一个默认的Java堆栈实现作为类java.util.Stack
。
适用于所有堆栈实现的两个强制操作是:
- push():数据项放置在堆栈指针指向的位置。
- pop():从堆栈指针指向的位置删除并返回数据项。
某些严重依赖堆栈的环境可能会根据要求提供额外的操作。Stack的最常见用途是表达式求值和语法分析。您也可以在字处理器的undo \ redo操作中找到它们。
Java堆栈实现源代码
下面的程序是Stack数据结构的示例实现。您可以根据需要随意修改源代码。
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();
}
}
现在让我们通过从堆栈中推送和弹出一些条目来测试我们的Stack实现。
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 );
}
}
输出:
[10,20,30,40]
40
三十
20
[10]
这就是关于Java Stack Implementation示例的这个简单但重要的概念。