zoukankan      html  css  js  c++  java
  • 数据结构第三章:栈的应用举例

    栈结构所具有的“先进后出”特性,使得栈成为程序设计中的有用工具。在本节我们将介绍几个栈应用的典型例子。

    栈应用之一:数制转换

    import java.util.Stack;
    
    public class ChangeData {
        public static void main(String[] args) {
            change(3467,8);
        }
        public static void change(int data,int dataSize){
            Stack<Integer> stack = new Stack<>();
            while (data!=0){
                stack.push(data%dataSize);
                data = data/dataSize;
            }
            while (!stack.empty()){
                Integer pop = stack.pop();
                System.out.println(pop);
            }
        }
    }
    

    栈的应用之二:括号匹配


    平时刷题的时候会经常遇到一个题目,就是给你一串括号有大括号,中括号,小括号,判断给出的括号能否匹配,这种题目大家第一印象肯定是用栈来实现,基本的思路是判断如果是左边括号入栈,如果是右边括号出栈,最后判断栈是否为空。
    后来在论坛里面看到有一个大神提供的解法,感觉思路很不错,在这里就把他记录下来。具体思路如下:

    遍历字符串,判断如果是左括号,那么将其对应的右括号入栈,主要这里不是将左括号入栈,举个例子比如当前字符为'{'那么就将'}'入栈;当遇到右括号的时候,判断两个条件:

    1、栈不为空;

    2、栈顶元素出栈,并且和当前字符相等。

    只要这两个条件有一个不满足,那么直接返回false。条件1如果不满足,也就是栈为空,那么表示右括号比左括号的数量要多自然不能匹配;如果出栈的字符和当前的右括号不等,也表示不能匹配成功。

    最后判断栈是否为空,为空表示刚好匹配,不为空表示左括号比右括号多。具体代码实现如下:

    import java.util.Stack;
    import java.util.Scanner;
     
    public class Matching{
     
        public static boolean isVaild(String s){
    		Stack<Character> stack = new Stack<Character>();
    		for (char c : s.toCharArray()) {
    			if (c == '(')
    				stack.push(')');
    			else if (c == '{')
    				stack.push('}');
    			else if (c == '[')
    				stack.push(']');
    			//遍历过程中如果stack为空,证明左符号少于右符号
    			else if (stack.isEmpty() || stack.pop() != c)
    				return false;
    		}
    		//遍历完成以后如果stack不为空,那么证明左符号多于右符号
    		return stack.isEmpty();
    	}
     
        public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while(in.hasNext()){
    			String line = in.nextLine();
    			boolean res = isVaild(line);
    			System.out.println(res);
    		}
    	}
     
    }
    
  • 相关阅读:
    集群任务管理系统SGE的简明教程
    三代全长转录组测序和组装
    quota
    基因组转座元件
    单倍体
    什么是寒武纪、志留纪、泥盆纪、白垩纪
    对组装之后的三代基因组进行polish
    使用 PhyML 构建进化树
    PAML软件中的mcmctree命令估算物种分歧时间
    OrthoMCL及orthofinder 两种软件进行聚类分析
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/14171748.html
Copyright © 2011-2022 走看看