使用数组的 Java 栈实现

使用数组的 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 栈实现示例的简单但重要的概念。

学习愉快!