数据结构之栈的简单应用(判断字符串中括号的合法性)
Posted guojbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之栈的简单应用(判断字符串中括号的合法性)相关的知识,希望对你有一定的参考价值。
数据结构之栈(判断字符串中括号的合法性)
- 栈的定义
- 栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为“栈顶”,相应的另一端称为“栈底”;另外其还有先进后出,后进先出的特征。
- 栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现。
- 说到线性结构,得先了解一下数据的逻辑结构,数据的逻辑结构分为线性结构、集合结构、树形结构和图形结构,如下图所示,栈是一种特殊的线性表,是线性结构的一种。
- 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)); // 不合法
以上是关于数据结构之栈的简单应用(判断字符串中括号的合法性)的主要内容,如果未能解决你的问题,请参考以下文章