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

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

  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));  // 不合法

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

时间: 2024-12-11 09:10:18

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

大话数据结构——使用栈实现简单的四则运算

最近在读<大话数据结构>,里面有个例子是使用栈实现四则运算,现在我用java把这个功能实现试试 代码如下: package com.datastruct; import java.util.ArrayList; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StackPractice { private static ArrayList&l

简单数据结构之栈模拟

1 /************************************************************************************** 2 * Function : 模拟栈 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不得

【数据结构】栈和队列

栈和队列 容器数据结构是指一些包含了若干个其他相同或不同的数据结构的数据结构,被包含的这些每一个独立的数据结构都被称为一个元素,在一个容器中的元素往往支持相同的操作,具有类似的性质.之前说到过的线性表其实就是一种容器数据结构,本文中介绍的两种最常用的容器数据结构是栈和队列. 从功能上看,栈和队列大多用于计算过程中保存临时数据,这些数据是在计算过程中发现或产生的.在而后的计算中可能会用到这些数据.如果这些数据是固定的个数以及大小的话,可以构建几个变量来储存它们,但是如果这些数据不确定的话,就需要一

数据结构之栈定义及基本操作实现

终于有可以有时间写点数据结构的学习总结了,前段时间一直在紧张的忙一些项目,都没有空出时间来学习数据结构,现在终于可以稍微喘口气了,还是数据结构有意思,这两天看了点栈的东西,写下来总结一下,有错误的地方希望看到的朋友指出来,感激不尽. 根据学习,栈就是一种线性数据结构,栈的运算只能在表的一段进行,所以这种数据结构具有“后进先出”的特点. 接下来是栈的c语言实现.其中栈由一个top节点和bottom节点组成,这两个节点分别指向栈的顶部和底部.其中栈的组成结点是由结构体实现,结构体由数据库和指向下一个

栈及其简单应用

栈是什么 栈就是一个先进先出的线性表,若能够更加方便地去理解栈,我们可以跟剧具体的图来进行理解. 相信这个图十分的生动形象,可以看出栈就像是一个桶,若每一个元素进栈的时候,便会存储在最底下,后来的会在上面:而如果需要取出元素,那么必须从最上面开始取,先放的便只能后来取,后放的便只能先取,因此栈的特点便是:先进后出,后进先出. 如何模拟并存储栈的操作 为了方便,我们需要用数组去模拟栈的序列.即: 我们定义数组和变量来表示栈,即: Stack表示栈的序列,top代表栈的元素个数,那么自然: Stac

用递归法判断字符串A中包含多少个字符串B

string类提供了判断字符串B在字符串A中首次(或最后)出现的Index的方法,但有时候需要判断B在A中出现了多少次. 为此想了一个算法. 1 public static void CountIndexOf1(string A, string B,int startindex,ref int count) 2 { 3 4 int j= A.IndexOf(B,startindex); 5 if (j <= 0) 6 return; 7 count++; 8 CountIndexOf(A, B,

C语言判断字符串是否为数字

判断一个字符串是否为数字, 听起来很简单,实现还是有点难度的. 最近写了一个,如下: #define IS_BLANK(c) ((c) == ' ' || (c) == '\t') #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9') #define IS_ALPHA(c) ( ((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= '

Shell判断字符串包含关系的几种方法

现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含“baidu”字符串 以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault. 方法一:利用grep查找 1 strA="long string" 2 strB="string" 3 result=$(echo $strA | grep "${strB}") 4 if [[ &

lintcode 容易题:Unique Characters 判断字符串是否没有重复字符

题目: 判断字符串是否没有重复字符 实现一个算法确定字符串中的字符是否均唯一出现 样例 给出"abc",返回 true 给出"aab",返回 false 挑战 如果不使用额外的存储空间,你的算法该如何改变? 解题: 定义一个集合最简单. Java程序: public class Solution { /** * @param str: a string * @return: a boolean */ public boolean isUnique(String st