码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之栈的简单应用(判断字符串中括号的合法性)

时间:2019-06-08 01:09:51      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:esc   ons   线性结构   特殊   racket   for   cti   UNC   const   

数据结构之栈(判断字符串中括号的合法性)

  1. 栈的定义
    • 栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为“栈顶”,相应的另一端称为“栈底”;另外其还有先进后出,后进先出的特征。
    • 栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现。
    • 说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,栈是一种特殊的线性表,是线性结构的一种。
      技术图片
  2. JavaScript 定义一个栈结构的构造函数 (node环境)
module.exports = function Stack() {
    // 初始化一个栈
    const arr = []
    // 压栈
    this.push = item => arr.push(item)
    // 弹栈
    this.pop = () => arr.pop()
    // 返回栈顶元素
    this.top = () => arr[arr.length - 1]
    // 栈的大小
    this.size = () => arr.length
    // 栈是否为空
    this.isEmpty = () => arr.length === 0
    // 清空栈
    this.clear = () => arr.splice(0, arr.length)
}

3.栈的简单应用、

需求: 判断一个字符串中的括号是否成对,是否合法?

const str1 = ‘((3223)2)2(2)‘

const str2 = ‘)22(12)sf1(sdfs‘

  • 思路:

    • 创建一个后进先出的栈
    • 遍历字符串
    • 如果元素是( 压入栈中
    • 如果是 ),就要判断栈是否为空,如果为空返回‘不合法’;如果不为空,就弹出栈顶元素
    • 如果遍历结束了,就要再次判断栈是否为空,如果为空返回‘合法’,否则返回‘不合法’
  • 步骤:

     // 1. 引入栈结构的构造函数
    const Stack = require('./Stack')
    const str1 = '((3223)2)2(2)'
    const str2 = ')22(12)sf1(sdfs'
    
    // 2. 创建一个函数,在函数中初始化一个栈结构,遍历要判断的字符串
    /**
     * @description 判断一个字符串中包含的括号是否成对,是否合法
     * @param {String} str 要判断合法性的字符串
     */
    function is_legal_brackets(str) {
    
      // 初始化栈结构
      const stack = new Stack()
      // 遍历字符串
      for (const item of str) {
        if (item === '(') {
          stack.push(item)
        }
        if (item === ')') {
          if (stack.isEmpty()) {
            return '不合法'
          }
          stack.pop()
        }
      }
    
      return stack.isEmpty() ? '合法' : '不合法'
    }
    
     // 3. 调用定义好的is_legal_brackets函数
    console.log('str1是否合法? => ', is_legal_brackets(str1));  // 合法
    console.log('str2是否合法? => ', is_legal_brackets(str2));  // 不合法

数据结构之栈的简单应用(判断字符串中括号的合法性)

标签:esc   ons   线性结构   特殊   racket   for   cti   UNC   const   

原文地址:https://www.cnblogs.com/guojbing/p/10989632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!