使用 Java 的 DSA -堆栈
概述
Stack 堆栈是一种数据结构,它只允许在一端对数据进行操作。它只允许访问最后插入的数据。Stack 也称为 LIFO(后进先出)数据结构,Push 和 Pop 操作以这样的方式相关:只有最后推送(添加到堆栈)的项目才能弹出(从堆栈中删除)。
Stack 表示

我们将在本文中使用数组实现 Stack。
基本操作
以下是堆栈的两个主要操作。
Push −将元素推送到堆栈顶部。
Pop − 从堆栈顶部弹出一个元素。
堆栈支持以下几个操作。
Peek − 获取堆栈顶部元素。
isFull − 检查堆栈是否已满。
isEmpty − 检查堆栈是否为空。
推送操作
每当将元素推送到堆栈时,堆栈都会将该元素存储在存储的顶部并增加顶部索引以供以后使用。如果存储已满,通常会显示错误消息。

// 将项目推送到堆栈顶部 public void push(int data) { if(!isFull()){ // 将 top 加 1 并插入数据 intArray[++top] = data; }else{ System.out.println("Cannot add data. Stack is full."); } }
弹出操作
每当要从堆栈中弹出一个元素时,堆栈都会从存储顶部检索该元素并减少顶部索引以供以后使用。

// 从堆栈顶部弹出项目 public int pop() { // 检索数据并将顶部减少 1 return intArray[top--]; }
堆栈实现
Stack.java
package com.tutorialspoint.datastructure; public class Stack { private int size; // 堆栈的大小 private int[] intArray; // 堆栈存储 private int top; // 堆栈顶部 // 构造函数 public Stack(int size){ this.size = size; intArray = new int[size]; //初始化数组 top = -1; //堆栈最初为空 } // 操作:推送 // 将项目推送到堆栈顶部 public void push(int data) { if(!isFull()){ // 将顶部增加 1 并插入数据 intArray[++top] = data; }else{ System.out.println("无法添加数据。堆栈已满。"); } } // 操作:弹出 // 从堆栈顶部弹出项目 public int pop() { //检索数据并将顶部减少 1 return intArray[top--]; } // 操作:Peek // 查看堆栈顶部的数据 public int peek() { // 从顶部检索数据 return intArray[top]; } // 操作:isFull // 如果堆栈已满,则返回 true public boolean isFull(){ return (top == size-1); } // 操作:isEmpty // 如果堆栈为空,则返回 true public boolean isEmpty(){ return (top == -1); } }
演示程序
StackDemo.java
package com.tutorialspoint.datastructure; public class StackDemo { public static void main (String[] args){ // 创建新堆栈 Stack stack = new Stack(10); // 将项目推送到堆栈上 stack.push(3); stack.push(5); stack.push(9); stack.push(1); stack.push(12); stack.push(15); System.out.println("堆栈顶部的元素:" + stack.peek()); System.out.println("元素:"); // 打印堆栈数据 while(!stack.isEmpty()){ int data = stack.pop(); System.out.println(data); } System.out.println("堆栈已满: " + stack.isFull()); System.out.println("堆栈为空: " + stack.isEmpty()); } }
如果我们编译并运行上述程序,则会产生以下结果 −
堆栈顶部的元素:15 元素: 15 12 1 9 5 3 堆栈已满:false 堆栈为空:true