Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 360|回复: 0

[算法学习]栈的应用:括号匹配问题

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-19 00:09:58 | 显示全部楼层 |阅读模式


    1. import java.util.Scanner;
    2. public class BracketMatchTest{
    3.      public static boolean bracketMatch(String str) {
    4.         Stack< Integer> s = new Stack< Integer>();
    5.         for (int i=0;i< str.length();i++){       
    6.              char c = str.charAt(i);
    7.              switch (c){
    8.                     case "{":
    9.            case "[":
    10.            case "(":
    11.                   s.push(Integer.valueOf(c));
    12.                   break;
    13.            case "}":
    14.                 if (!s.isEmpty()&& ((Integer)s.pop()).intValue()=="{")
    15.                     break;
    16.                       else return false;
    17.                     case "]":
    18.                         if (!s.isEmpty()&& ((Integer)s.pop()).intValue()=="[")
    19.                     break;
    20.                      else return false;
    21.                 case ")":
    22.                   if (!s.isEmpty()&& ((Integer)s.pop()).intValue()=="(")
    23.                     break;
    24.               else return false;
    25.          }
    26.            }
    27.              if (s.isEmpty()) return true;
    28.              else  return false;
    29.         }
    30.       public static void main(String args[]){
    31.            Scanner in=new Scanner(System.in);
    32.            while(true){
    33.             System.out.println("请输入带括号的字符串");
    34.             String str=in.next();
    35.             if(str.equals("OK")) break;
    36.             System.out.println(bracketMatch(str));
    37.            }
    38.      }
    39. }
    40. //链式栈
    41. class Stack< T> implements StackInterface< T> {
    42.        
    43.         private Node< T> top;        //链表首结点引用
    44.         private int size;        //栈的大小
    45.        
    46.         public Stack() {
    47.                 top = null;
    48.                 size = 0;
    49.         }
    50.         //返回堆栈的大小
    51.         public int getSize() {
    52.                 return size;
    53.         }
    54.         //判断堆栈是否为空
    55.         public boolean isEmpty() {
    56.                 return size==0;
    57.         }
    58.         //数据元素e入栈
    59.         public void push(T t) {
    60.                 Node< T>  q = new Node
    61.    
    62.      (t,top);
    63.                 top = q;
    64.                 size++;
    65.         }
    66.         //栈顶元素出栈
    67.         public T pop() throws StackEmptyException {
    68.                 if (size< 1)
    69.                         throw new StackEmptyException("错误,堆栈为空。");
    70.                 T t = top.getData();
    71.                 top = top.getNext();
    72.                 size--;
    73.                 return t;
    74.         }
    75.         //取栈顶元素
    76.         public T peek() throws StackEmptyException {
    77.                 if (size< 1)
    78.                         throw new StackEmptyException("错误,堆栈为空。");
    79.                 return top.getData();
    80.         }
    81.      //测试:将10进制数转换成8进制数
    82.      public static void main(String args[]){
    83.          System.out.println("请输入十进制数");
    84.          java.util.Scanner in=new java.util.Scanner(System.in);
    85.          int i=in.nextInt();
    86.          int temp=i;
    87.          Stack< Integer> s=new Stack< Integer>();
    88.          while(i>0){
    89.             s.push(i%8);
    90.             i=i/8;
    91.           }
    92.           System.out.println("十进制数"+temp+"转换成8进制数是:");
    93.       
    94.    
    95.           while(!s.isEmpty())
    96.             System.out.print(s.pop());
    97.          
    98.      }
    99. }
    100. interface StackInterface
    101.      
    102.        {
    103.         //返回堆栈的大小
    104.         public int getSize();
    105.        
    106.         //判断堆栈是否为空
    107.         public boolean isEmpty();
    108.        
    109.         //数据元素e入栈
    110.         public void push(T t);
    111.        
    112.         //栈顶元素出栈
    113.         public T pop() throws StackEmptyException;
    114.        
    115.         //取栈顶元素
    116.         public T peek() throws StackEmptyException;
    117. }
    118. class Node< T> {
    119.     private T data;
    120.     private Node< T> next;
    121.     public Node() {
    122.         this(null,null);
    123.     }
    124.     public Node(T data, Node< T> next) {
    125.         this.data = data;
    126.         this.next = next;
    127.     }
    128.    public T getData(){
    129.        return data;
    130.     }
    131.     public void setData(T data){
    132.         this.data=data;
    133.     }
    134.     public Node< T> getNext(){
    135.         return this.next;
    136.     }
    137.     public void setNext(Node
    138.       
    139.         next){
    140.        this.next=next;
    141.    }
    142. }
    143. //堆栈为空时出栈或取栈顶元素抛出此异常
    144. class StackEmptyException extends RuntimeException{
    145.        
    146.         public StackEmptyException(String err) {
    147.                 super(err);
    148.         }       
    149. }
    150.       
    151.      
    152.    
    复制代码

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/19/000958468.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 07:50 , Processed in 0.290610 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表