首页 > 编程语言 >数据结构与算法——栈的使用

数据结构与算法——栈的使用

时间:2024-03-30 23:33:56浏览次数:21  
标签:stackArray int top public 算法 使用 Stack 数据结构 stack

栈是一种具有特定操作规则的数据结构,遵循先进后出(FILO)的原则,即最后进入的元素最先被访问或移除。栈通常用于需要临时存储数据,以及实现逆序输出、函数调用和表达式求值等场景。

基本操作:
创建栈、压栈(入栈)、弹栈(出栈)、获取栈顶元素、判断栈是否为空等。

代码如下:


import java.util.EmptyStackException;

class Stack {
    private int maxSize;
    private int[] stackArray;
    private int top;

    public Stack(int size) {
        this.maxSize = size;
        this.stackArray = new int[maxSize];
        this.top = -1;
    }

    public void push(int value) {
        if (top == maxSize - 1) {
            System.out.println("Stack is full. Cannot push element.");
            return;
        }
        stackArray[++top] = value;
    }

    public int pop() {
        if (top == -1) {
            throw new EmptyStackException();
        }
        return stackArray[top--];
    }

    public int peek() {
        if (top == -1) {
            throw new EmptyStackException();
        }
        return stackArray[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }
}


测试:


public class Main {
    public static void main(String[] args) {
        Stack stack = new Stack(5);

        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println("Top element: " + stack.peek());

        System.out.println("Pop element: " + stack.pop());

        System.out.println("Is stack empty? " + stack.isEmpty());
    }
}

标签:stackArray,int,top,public,算法,使用,Stack,数据结构,stack
From: https://blog.csdn.net/2401_82884096/article/details/136962820

相关文章

  • Leetcode算法训练日记 | day9
    一、实现strStr函数1.题目Leetcode:第28题给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回 -1。示例1:输入:haystack="sadbutsad",needle="sad"输......
  • 数据结构与算法——双向链表的使用原理
    双向链表是一种特殊链表,每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。双向链表可以支持双向遍历,插入和删除操作更加高效。双向链表的基本操作包括插入、删除、查找等。双向链表的常见应用场景包括LRU缓存淘汰算法、双向队列等需要频繁在两端进行操作的场景......
  • (算法)Lake Counting <Flood Fill 洪水灌溉模型>
    题目:题解:#include<stdio.h>intn,m;chararr[110][110];//元数据数组intcount=0;//计数器intdx[8]={1,1,1,-1,-1,-1,0,0};intdy[8]={-1,0,1,-1,0,1,1,-1};intt[110][110];//判断是否被选择voiddfs(intx,inty){for(inti=0;i<......
  • (算法) 入门——<迷宫问题>
    题目:题解:#include<stdio.h>intw,h;chararr[20][20];//初始值数组intt[20][20];//判断是否被选择的数组intdx[4]={0,0,-1,1};intdy[4]={1,-1,0,0};intcount=1;//计数器voiddfs(intx,inty){for(inti=0;i<4;i++)//暴力穷......
  • 使用OpenEuler x86_64 实现Bouncycastle SM4加解密功能
    使用OpenEulerx86_64实现BouncycastleSM4加解密功能一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文......
  • 代码随想录算法训练营第8天 | 字符串
    344反转字符串voidreverseString(vector<char>&s){chartmp; inti=0,j=s.size()-1; while(i<j) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; i++;j--; }}swap库函数的实现:位运算法——按位异或s[i]^=s[j];s[j]^=s[i];s[i]^=s[j];54......
  • memcmp 函数的使用
    memcmp函数的使用memcmp函数的定义intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节返回值如下:memcmp函数的使用#include<stdio.h>#include<string.h>intmain(){ charbu......
  • 24年3月使用VS22编译Telegram Desktop
    0.环境准备,我使用的VS版本是17.9.4,SDK版本是10.0.22621.0,最好不要用太老的版本 1.去下载Python,git,cmake这三个工具,然后在D盘根目录新建TBuild文件夹,里面再建Libraries和ThirdParty这两个文件夹下载地址:Python3.10:https://www.python.org/downloads/Git:https://git-scm.com/......
  • 【图论】3.30学习记录 k短路(A*算法)
    从最短路说起的k短路3.26看了最短路和次短路。我们发现次短路实际上就是把最短路给破坏掉然后跑最短路...那我想...是不是破坏(k-1)次就能得到k短路呢,很显然是的,但是复杂度比较高,(因为一次dij是O(nlogn)级别的,次短路的话最坏要跑m次当最短路有m条边的时候)那么k比较大的时候就......
  • Java 递归算法系列:建议收藏的 13 个经典问题的代码实现详解
    递归算法题求阶乘(Factorial)斐波那契数列(FibonacciSequence)汉诺塔(TowerofHanoi)遍历树节点(TreeTraversal)数组反转(ArrayReversal)爬楼梯问题(ClimbingStairsProblem)回文数检测(PalindromeChecking)找出数组中的最大值(FindingMaximumValueinanArray)分治算法......