java数据结构关于栈的实例应用

Java数据结构之栈的实例应用攻略

1. 栈的概述

栈是一种具有特定操作规则的线性数据结构,遵循先进后出(Last-In-First-Out,LIFO)的原则。栈的操作包括入栈(push)和出栈(pop),以及获取栈顶元素(peek)等。

2. 栈的实例应用

2.1. 括号匹配

栈在括号匹配问题中有广泛的应用。通过使用栈,我们可以检查一个字符串中的括号是否匹配。

示例代码:

import java.util.Stack;

public class BracketMatching {
    public static boolean isBracketMatching(String input) {
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < input.length(); i++) {
            char ch = input.charAt(i);

            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else if (ch == ')' || ch == ']' || ch == '}') {
                if (stack.isEmpty()) {
                    return false;
                }

                char top = stack.pop();
                if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) {
                    return false;
                }
            }
        }

        return stack.isEmpty();
    }

    public static void main(String[] args) {
        String input1 = \"((()))\";
        String input2 = \"({[]})\";
        String input3 = \"({[)})\";

        System.out.println(isBracketMatching(input1));  // Output: true
        System.out.println(isBracketMatching(input2));  // Output: true
        System.out.println(isBracketMatching(input3));  // Output: false
    }
}

2.2. 浏览器的前进后退功能

栈在浏览器的前进后退功能中也有应用。当用户点击浏览器的前进或后退按钮时,浏览器会将当前页面的URL入栈或出栈,以便在需要时可以回退到上一个页面或前进到下一个页面。

示例代码:

import java.util.Stack;

public class BrowserHistory {
    private Stack<String> backStack;
    private Stack<String> forwardStack;
    private String currentURL;

    public BrowserHistory() {
        backStack = new Stack<>();
        forwardStack = new Stack<>();
        currentURL = \"\";
    }

    public void visit(String url) {
        backStack.push(currentURL);
        currentURL = url;
        forwardStack.clear();
    }

    public boolean canGoBack() {
        return !backStack.isEmpty();
    }

    public boolean canGoForward() {
        return !forwardStack.isEmpty();
    }

    public String goBack() {
        if (canGoBack()) {
            forwardStack.push(currentURL);
            currentURL = backStack.pop();
            return currentURL;
        }
        return \"\";
    }

    public String goForward() {
        if (canGoForward()) {
            backStack.push(currentURL);
            currentURL = forwardStack.pop();
            return currentURL;
        }
        return \"\";
    }

    public String getCurrentURL() {
        return currentURL;
    }

    public static void main(String[] args) {
        BrowserHistory history = new BrowserHistory();

        history.visit(\"https://www.google.com\");
        history.visit(\"https://www.openai.com\");
        history.visit(\"https://www.github.com\");

        System.out.println(history.getCurrentURL());  // Output: https://www.github.com

        System.out.println(history.canGoBack());  // Output: true
        System.out.println(history.goBack());     // Output: https://www.openai.com

        System.out.println(history.canGoForward());  // Output: true
        System.out.println(history.goForward());     // Output: https://www.github.com

        System.out.println(history.getCurrentURL());  // Output: https://www.github.com
    }
}

以上是关于Java数据结构中栈的实例应用的攻略,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java数据结构关于栈的实例应用 - Python技术站

(0)
上一篇 2023年8月6日
下一篇 2023年8月6日

相关文章

  • Grpc微服务从零入门

    Grpc微服务从零入门 什么是Grpc gRPC是谷歌推出的一款高性能、开源的通用的 RPC 框架。其支持多种语言,并且可以运行在任何地方。gRPC 基于标准的HTTP / 2协议构建,并支持多种序列化和反序列化协议(protobuf、JSON)。这一点使得 gRPC 很适合分布式系统的构建,并可完美结合Kubernetes、Istio等云原生技术基础设施,…

    其他 2023年3月28日
    00
  • Android AccessibilityService 事件分发原理分析总结

    以下是使用标准的Markdown格式文本,详细讲解Android AccessibilityService事件分发原理的完整攻略: Android AccessibilityService 事件分发原理分析总结 Android AccessibilityService是一种特殊的服务,用于帮助用户访问和操作Android设备上的应用程序。它可以监听和处理来自…

    other 2023年10月14日
    00
  • 最新Android版本、代号、对应API/NDK级别、发布时间及市场份额

    Android版本 代号 API/NDK级别 发布时间 市场份额 Android 12 S API 31 2021年10月 未知 Android 11 R API 30 2020年9月 未知 Android 10 Q API 29 2019年9月 未知 Android 9 Pie API 28 2018年8月 未知 Android 8.1 Oreo API …

    other 2023年8月3日
    00
  • 两万字详解Java Sring String的常见操作以及StringBuffer StringBuilder的区别

    两万字详解Java String 1. String的常见操作 1.1 字符串拼接 Java中,我们可以使用加号+或concat()方法来进行字符串拼接。例如: String str1 = "Hello"; String str2 = "World!"; String str3 = str1 + " &quo…

    other 2023年6月27日
    00
  • ajax的异步操作及页面重定向跳转

    Ajax的异步操作及页面重定向跳转 在现代Web应用中,Ajax已成为不可或缺的一部分,它可以让我们在不刷新整个页面的情况下,向服务器发送请求并获取数据,从而实现动态更新页面的效果。本文将介绍Ajax的异步操作以及如何在Ajax中实现页面重定向跳转。 Ajax异步操作 异步操作是指不需要等待任务完成就可以继续执行下一个操作。Ajax的异步操作就是通过XMLH…

    其他 2023年3月28日
    00
  • python+opencv批量读取一个文件夹下所有的图片并处理

    Python+OpenCV批量读取一个文件夹下所有的图片并处理 在Python中,使用OpenCV库可以方便地处理图像。如果需要批量读取一个文件夹下所有图片进行处理,可以使用Python+OpenCV来实现。以下是Python+OpenCV批量读取一个文件夹下所有的图片并处理的完整攻略,包括常见问题和两个示例说明。 常见问题 1. 什么是OpenCV? Op…

    other 2023年5月9日
    00
  • shell编程入门之变量,字符串,数组,函数使用方法总结

    Shell编程入门之变量,字符串,数组,函数使用方法总结 变量 在Shell中,变量不需要事先声明,当一个变量被赋值后,它就已经存在了。 变量的定义 variable="value" 变量的使用 使用变量只需要在变量名前加$符号 echo $variable 变量的重新定义 重新定义一个已经定义的变量只需要再次赋值即可,之前的值将会被覆盖…

    other 2023年6月20日
    00
  • Win10系统资源管理器经常崩溃重启的原因及解决方法

    Win10系统资源管理器崩溃及解决方法 一、问题描述 Win10系统中的资源管理器经常出现崩溃重启的情况,给用户带来很大的困扰。这种情况一般表现为: 突然出现蓝屏; 界面卡顿; 打开文件夹时卡在“搜索”界面; 窗口不断刷新,变换大小等等。 这种情况会导致使用体验变得非常糟糕,甚至会给用户带来数据损失的风险。因此,我们必须要找到解决方法。 二、原因分析 造成W…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部