精华内容
下载资源
问答
  • java 的实现和应用

    2017-07-05 13:58:44
    java写的简单的实现,欢迎大家使用
  • java数字和符号模拟计算器(中缀表达式) “计算中缀表达式”可以称得上是一个特别经典的关于的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说...
  • Java栈源代码.txt

    2020-01-10 22:12:13
    通过Java面向对象思想和类的封装性完成的类设计,选择合适的底层存储结构,完成的判空isEmpty()、进栈push()、出栈pop()、取栈顶元素peek(),存储的对象以泛型给出。并和Java中的Stack的类以及功能进行比较...
  • 主要介绍了Java栈之链式栈存储结构的实现代码的相关资料,需要的朋友可以参考下
  • JAVA栈应用之括号匹配

    千次阅读 2018-04-26 23:10:18
    JAVA栈应用之括号匹配 在数据处理中,常常要判断数据中的括号,应用栈来处理及其方便。 当用户输入一个字符串时,遇到左括号时,将其入栈,如’(’ ‘[”’{,而遇到右括号时,如’)”}”]’时,与栈顶的括号与...

    JAVA栈应用之括号匹配

    在数据处理中,常常要判断数据中的括号,应用栈来处理及其方便。
    当用户输入一个字符串时,遇到左括号时,将其入栈,如’(’ ‘[”’{,而遇到右括号时,如’)”}”]’时,与栈顶的括号与当前匹配,如果匹配成功,则将栈中的括号出栈,表示当前括号成对。
    括号匹配
    如匹配失败,又分为两种情况,栈已经空和栈不空,若栈已空,则现在右括号比左括号多()},栈不空则很明显,当前括号与栈中括号不匹配(}.
    不匹配
    当所有的匹配完成,也有两种状态,栈空或不空,栈空,当前字符串中所有字符匹配成功,栈不空,则还有左括号待匹配,说明左括号多。

    代码

    这里不再对栈作深入说明,详细说明在这里:
    >JAVA实现栈<

    package bracket;
    
    interface Stack {
    void stackPush(Object obj);// 入栈
    
    void stackPop();// 出栈
    
    int size();// 栈元素数量
    
    Object stackTop();// 取栈顶
    
    void printStak();// 辅助函数,打印栈中元素
    }
    
    class StackImp implements Stack {
    // 栈中要有啥?1.元素数量(头节点),里面放栈头和尾巴
    // 栈的每个节点放元素和下一个节点的位置
    private int size;
    private Node first;
    private Node last;
    
    // 建一个内部类,实例化节点
    private class Node {// 只能此内部访问,private修饰,增强安全性
        private Object item;
        private Node next;
    
        private Node(Object item, Node next) {//
            this.item = item;
            this.next = next;
        }
    }
    
    @Override
    public void stackPush(Object obj) {
        Node tmp = this.first;
        Node newNode = new Node(obj, null);
        this.last = newNode;
        if (null == this.first) {// 首次时
            this.first = newNode;
        } else {
            while (null != tmp.next) {
                tmp = tmp.next;
            }
            tmp.next = newNode;
        }
        ++this.size;
    }
    
    @Override
    public void stackPop() {
        Node tmp = this.first;
        if (null == tmp.next) {
            this.first = null;
            this.last = null;
            this.size = 0;
            return;
        }
        while (null != tmp.next.next) {
            tmp = tmp.next;
        }
        this.last = tmp;
        tmp.next = null;
        --this.size;
    }
    
    @Override
    public int size() {
        return this.size;
    }
    
    @Override
    public Object stackTop() {
        return this.last.item;// 不是返回return this.last啊
    }
    
    @Override
    public void printStak() {
        Node tmp = this.first;
        if (null == this.first) {
            return;
        }
        while (null != tmp.next) {
            System.out.print(tmp.item + "->");
            tmp = tmp.next;
        }
        System.out.println(tmp.item);
    }
    }
    
    class Factory {
    public static Stack getStack() {
        return new StackImp();
        }
    }
    
    public class Test {
    public static void main(String[] args) {
        Stack stack = Factory.getStack();
        String str = "(())hello Jan{{}}";
        // 括号匹配:左边括号入栈,右边括号,取栈,是一对,pop,不是,return wrong
        // 肯能会用到 字符串 转字符数组 char [] strarr = str.toCharArray();
        bracket(stack, str);
        // ++++++++++栈检测++++++++++
        // System.out.println(stack.size());
        // stack.stackPush(1);
        // stack.stackPush(2);
        // stack.stackPush(3);
        // stack.stackPush(4);
        // stack.stackPush(5);
         stack.stackPop();
        // System.out.println(stack.size());
        // stack.printStak();
    
    }
    
    public static void bracket(Stack stack, String str) {
        if (null == str) {
            return;
        }
        char[] strarr = new char[str.length()];// 这里的length()区别于数组中的length,前是方法,后是数组变量
        strarr = str.toCharArray();// 直接就放进去了
        int i = 0;// 大小写转换 CTRL+ shift x/y
        while (i < strarr.length) {
            // 先判断是不是括号,是左括号,入栈
            if ('(' == strarr[i] || '[' == strarr[i] || '{' == strarr[i]) {
                stack.stackPush(strarr[i]);
                ++i;// 前置效率高,不产生临时变量
                continue;// 入栈后面就不用再走了
            }
            if (')' == strarr[i] || ']' == strarr[i] || '}' == strarr[i]) {// 是右边括号
                if (stack.size() == 0) {// 栈空了,还来右边括号,那右边括号多
                    System.out.println("右括号多");
                    ++i;
                    return;
                }
                char c = stack.stackTop().toString().charAt(0);// 曲线救国,对象转字符串再转字符
                if ((c == '(' && ')' == strarr[i]) || (c == '[' && ']' == strarr[i])
                        || (c == '{' && '}' == strarr[i])) {
                    stack.stackPop();// 栈中的括号与当前匹配
                    ++i;
                    continue;
                } else {// 此时栈中与当前括号不匹配//[}
                    System.out.println("括号不匹配");
                    ++i;
                    return;
                }
            }
            ++i;
        }
        if (stack.size() != 0) {// 循环结束,要么完全匹配(栈空),要么左边括号多(栈不空),
            System.out.println("左括号多");
            return;
        }
        System.out.println("匹配 =.=");
        }
    }
    

    栈的相关应用还有>JAVA栈应用之RPN逆波兰表达式求值<,本次>JAVA栈应用之括号匹配源码<已上传,以及C语言版本的>C栈应用之括号匹配源码<

    展开全文
  • Java 的应用场景

    千次阅读 2019-08-23 10:07:57
    的特点就是先进后出,后进先出,分别用push和pop表示进栈和出栈操作。那么的应用场景有很多,比如: 子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到...

    栈的特点就是先进后出,后进先出,分别用push和pop表示进栈和出栈操作。那么栈的应用场景有很多,比如:

    1. 子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
    2. 处理递归调用:和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
    3. 逆序输出。
    4. 表达式的转换[中缀表达式转后缀表达式]与求值
    5. 二叉树的遍历。
    6. 图的深度优先(depth-first)搜索法。
    7. 数制转换:通过求余法,每次将余数进栈,最后将所有余数出栈即可。
    8. 括号匹配校验
    9. 迷宫求解
    10. 实现递归-汉诺塔
    11. 等等

    使用栈完成简单表达式的计算思路:

    1. 使用一个数栈存放数,使用一个符号栈存放操作运算符
    2. 通过一个index值(索引),来遍历我们的表达式
    3. 如果我们发现是一个数字,就直接入数栈
    4. 如果我们发现是一个符号,则分以下情况:
      4.1 如果当前符号栈为空,就直接入栈
      4.2 如果当前符号栈部位空,就进行比较。如果当前操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将运算结果入数栈,经当前的操作符入符号栈。如果当前操作符的优先级大于栈中的操作符,就直接入符号栈。
    5. 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并进行运算。
    6. 最后在数栈中只有一个数字,就是表达式的结果。
    展开全文
  • java 的使用

    万次阅读 多人点赞 2018-09-26 09:46:16
    Stack的基本使用 初始化 Stack stack=new Stack ...取栈顶值(不出) stack.peek() 进栈 stack.push(Object); 出栈 stack.pop(); 实例: public class Test01 { public static void main(String[] args) { ...
    Stack的基本使用
    初始化
    Stack stack=new Stack
    判断是否为空
    stack.empty()
    取栈顶值(不出栈)
    stack.peek()
    进栈
    stack.push(Object);
    出栈
    stack.pop();
    
    实例:
    public class Test01 {
        public static void main(String[] args) {
            Stack stack=new Stack();
            //1.empty()栈是否为空
            System.out.println(stack.empty());
            //2.peek()栈顶值    3.进栈push()
            stack.push(new Integer(1));
            stack.push("b");
            System.out.println(stack.peek());
            //4.pop()出栈
            stack.pop();
            System.out.println(stack.peek());
            
        }
    }

     

    展开全文
  • 主要介绍了Java栈的应用之括号匹配算法,结合实例形式分析了Java使用栈实现括号匹配算法的相关原理、操作技巧与注意事项,需要的朋友可以参考下
  • Java栈 使用方法

    千次阅读 2019-04-09 09:59:34
    实例化 Stack stack=new Stack(); 判断是否为空 stack.empty() 取栈顶值(不出) stack.peek() 进栈 stack.push(Object); 出栈 stack.pop();

    实例化

    Stack stack=new Stack();

    判断是否为空

    stack.empty()

    取栈顶值(不出栈)

    stack.peek()

    进栈

    stack.push(Object);

    出栈

    stack.pop();


         

     

     

    展开全文
  • 主要介绍了Java基于栈方式解决汉诺塔问题的方法,结合实例形式分析了java栈方式采用递归与非递归算法解决汉诺塔问题的相关操作技巧,需要的朋友可以参考下
  • java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程最基本的执行行为就是函数的调用。每次函数调用其实是通过java栈传递数据的。 数据结构中的栈的特性:先进...
  • Java栈中add()和push()的不同之处

    千次阅读 2020-02-29 22:42:49
    Java栈中add()和push()的不同之处 在日常使用中发现往栈中添加元素既可以用add(),也可以用push()。 需要注意的是栈本身没有add()方法,add()方法是来自栈继承的类 Vector。 Vector类是什么? Vector与ArrayList一样...
  • java栈实现简单的计算器

    千次阅读 2018-09-03 15:02:09
    一、代码 直接上代码,分为两个类calc.... * 用实现表达式的运算v1.0 * 支持运算:+、-、*、/、%、^、!、() * 输入的表达式需以&quot;#&quot;结束 */ package calc; import java.util.Stack; pub...
  • 主要介绍了java 和堆区别详细介绍的相关资料,需要的朋友可以参考下
  • 模拟Java栈溢出过程

    千次阅读 2019-06-22 15:15:01
    Java栈,是指Java虚拟机栈,本地方法栈; Java虚拟机栈是Java方法执行的内存模型,每个方法执行的同时都会创建一个栈帧用于存储局部变量,操作数栈,动态链接(在一个方法中调用另一个方法),方法出口等信息。每...
  • 主要介绍了用Java代码实现数据结构的基本方法归纳,各种算法的实现也是ACM上经常出现的题目,是计算机学习的基本功,需要的朋友可以参考下
  • Java 类(stack.class)

    千次阅读 2019-10-23 17:23:49
    java中的类 从图中可以发现,是属于java.util包的 是Vector的一个子类,继承于Vector。它实现了一个标准的后进先出的。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法...
  • Java 的实现 数据结构

    千次阅读 2018-01-19 18:47:05
    的操作: 先封装一个stack类 public class Stack { int top; int bottom; int arr[]; public int getTop() { return top; } public void setTop(int top) {
  • 最近在看《深入理解Java虚拟机》,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的...1、Java栈Java栈的区域很小,只有1M,特点是存...
  • 设置java栈(stack)和堆(heap)大小

    千次阅读 2019-03-09 23:02:40
    1,java空间设置 -------------------- java -X //输出java的非标准选项 java -Xss&lt;size&gt; xxx //设置stack大小 java -Xss512k ... //stack默认大小是1m java -Xss256k .. //1k java -Xss256...
  • 主要介绍了java内存溢出示例(堆溢出、溢出),需要的朋友可以参考下
  • java栈代码

    2011-12-23 21:52:59
    java栈实验代码
  • 什么是java栈深度? java栈深度有什么用? 我们知道java栈是java虚拟机的一个重要的组成部分,在栈里进行线程操作,存放方法参数等等。 栈在初始化过后是有一定的大小的。 public class Test{ private int ...
  • java栈 函数如何调用

    千次阅读 2016-10-11 17:01:44
    2、当函数返回时,栈帧从java栈中被弹出。 java 方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另外一种 是抛出异常。 以上两种方式都会导致栈帧被弹出。 3、在一个栈帧中,至少包含局部变量表...
  • java栈深度

    万次阅读 2016-12-05 19:34:43
    什么是java栈深度? java栈深度有什么用? 我们知道java栈是java虚拟机的一个重要的组成部分,在栈里进行线程操作,存放方法参数等等。 栈在初始化过后是有一定的大小的。 public class Test{    private ...
  • Java栈、队列、链表常见算法浅析

    千次阅读 2019-01-19 11:01:46
    数据是基础,算法是灵魂...这篇文章我们只谈算法的具体实现思考过程,并没有相关代码实现,代码的实现过程请参见我的另外一篇文章:Java数据结构与算法中级篇之、队列、链表 源码下载地址:https://download.csdn...
  • java栈的实现(链表型)

    千次阅读 2018-06-18 13:06:02
    //的当前大小 private Integer size; /** * 的初始化 */ public void InitStack() { top = base = new LinkNode(); size = 0; } /** * 获取的大小 */ public int StackLenth() { return ...
  • 利用java写的一些关于和队列的小例子,拿出来供大家分享和学习.
  • Java栈的两种实现方式

    千次阅读 2017-04-20 22:11:52
    首先来看用数组实现的,比较简单import java.util.Arrays;/* * 用数组来实现一个 * :后进先出 * 主要有push pop peek isEmpty * peek 负责获取栈顶元素 在数组的实现中 peek负责获取最新存放在数组中的...
  • java 对象api和队列api的使用

    千次阅读 2018-07-23 21:54:06
    的实现,有两个方法:一个是用java本身的集合类型Stack类型;另一个是借用LinkedList来间接实现Stack。 1.Stack实现 有关Stack的具体知识可以参考:http://www.cnblogs.com/skywang12345/p/3308852.html  直接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 518,867
精华内容 207,546
关键字:

java栈

java 订阅