找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14776|回复: 1

[转载代码] [JS]分享一段代码,通过"栈"判断多重括号是否配对

[复制链接]
发表于 2017-9-6 17:30:25 | 显示全部楼层 |阅读模式
代码来自《learninng javascript data structures and algorithms》

  1. function matches(open, close)
  2. {
  3.     var opens = "([{",
  4.         closers = ")]}";
  5.     return opens.indexOf(open) == closers.indexOf(close);
  6. }

  7. function parenthesesChecker(symbols)
  8. {
  9.     var stack = new Stack();
  10.     var balanced = true;
  11.     var index = 0;
  12.     var symbol, top;

  13.     while (index < symbols.length && balanced)
  14.     {
  15.         symbol = symbols.charAt(index);
  16.         if (symbol == '(' || symbol == '[' || symbol == '{')
  17.         {
  18.             stack.push(symbol);
  19.         }
  20.         else
  21.         {
  22.             if (stack.isEmpty())
  23.             {
  24.                 balanced = false;
  25.             }
  26.             else
  27.             {
  28.                 top = stack.pop();
  29.                 if ( !matches(top, symbol) )
  30.                 {
  31.                     balanced = false;
  32.                 }
  33.             }
  34.         }

  35.         index++;
  36.     }

  37.     if (balanced && stack.isEmpty())
  38.     {
  39.         return true;
  40.     }
  41.    
  42.     return false;
  43. }

  44. console.log(parenthesesChecker('{{([][])}()}'));
  45. console.log(parenthesesChecker('[{()]'));


  46. function Stack()
  47. {
  48.     var items = [];

  49.     this.push = function(element) { items.push(element); };

  50.     this.pop = function() { return items.pop(); };

  51.     this.peek = function() { return items[items.length-1]; };

  52.     this.isEmpty = function() { return items.length == 0; };

  53.     this.size = function() { return items.length; };

  54.     this.clear = function() { items = []; };

  55.     this.print = function() { console.log(items.toString()); };

  56.     this.toString = function() { return items.toString(); };
  57. }
复制代码
 楼主| 发表于 2017-9-6 17:38:58 | 显示全部楼层
本帖最后由 523066680 于 2017-9-6 17:44 编辑

虽然可以直接通过 数组 push 和 pop 直接实现。
但 js 实现的这个"栈"还是有点意思。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:40 , Processed in 0.018758 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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