除了数组以外,栈【Stacks】和队列【Queues】就是和数组有些类似,但是拥有更多形式来添加和删除元素的数据结构,这篇来讨论栈。

栈是一个遵循后进先出【Last In First Out】的有序集合,最先进栈的元素叫做base,最后进的元素叫做top。

生活中栈的例子比如说公寓楼里的电梯,最后进去的人最先出来。在计算机中比如浏览器的前进和后退功能的实现,以及在Chrome浏览器Devtool工具查看调用栈,都是用到了栈。

定义一个完整的堆栈类 【Stack class】

function Stack(){let items = [];this.push = function(element){    // 给堆栈的top上面添加一个元素items.push(element);};this.pop = function(){             // 移除top的元素,并返回被移除的元素return items.pop();};this.peek = function(){             // 不修改,只返回top元素return items[items.length-1];};this.isEmpty = function(){           // 判断是否为空,返回布尔值return items.length == 0;};this.size = function(){              // 返回元素个数return items.length;};this.clear = function(){             // 清空元素items=[];};this.print = function(){              // 帮助打印出堆栈里面的内容console.log(items.toString());};
}

使用堆栈类 【Stack class】

定义好堆栈类之后,我们就通过例子来看如何使用堆栈类。

首先要初始化实例

let stack = new Stack();
console.log(stack.isEmpty()); // true

然后我们往堆栈里面添加几个元素

stack.push(5);
stack.push(8);console.log(stack.peek()); // 8 返回top元素stack.push(11);
console.log(stack.size()); // outputs 3
console.log(stack.isEmpty()); // falsestack.push(15);

下面这幅图展示了我们添加元素的过程

然后我们再调用 pop 方法移除两个元素

stack.pop();
stack.pop();
console.log(stack.size()); //  2
stack.print(); //  [5, 8]

下面这幅图展示了我们移除元素的过程

力扣题目练习【Leetcode】

关于栈的题目可以先做20,155,232,844,224,682,496。可以过滤选择得到 https://leetcode-cn.com/tag/stack/ 列表,这里分析题目20

20. 有效的括号
给定一个只包括'('')''{''}''['']' 的字符串,判断字符串是否有效。
根据输入输出看出,意思是如果字符串左右两边完全对称,就返回true,否则返回false

推荐在Chrome浏览器里面添加snippet添加和调试代码,可以自在地添加断点和打印语句,比较容易分析问题。

具体思路(以输入"(}"为例):

1 初始化一个空数组 stack[]

2 循环遍历字符串s,如果s[i]符合【左半边】的符号 ( [ { 这三者之一,就给数组 stack 添加其对应的【右半边】的符号。

isValid("(}") 第一个循环执行后,数组 stack 的内容为一个右括号 [")"]

3 第二次遍历字符串,此时 s[i] 为右大括号 "}",不符合任何一个 case 条件,所以走 default

4 default 条件里面判断 stack.pop() 是否严格等于 s[i],不等于则返回false

此时 s[i] 即第二个元素是右大括号,而 stack.pop() 返回的是右圆括号,所以这不是一个有效的字符串

5 返回true的情形同理可以分析得到啦~

下节介绍和栈十分类似的队列

栈判断字符串是否为中心对称_数据结构 Stacks 栈相关推荐

  1. 栈判断字符串是否为中心对称_数据结构和算法入门之判断括号字符串的合法性(valid parentheses)...

    今天终于开始看栈的部分咯!栈这个东西没啥好介绍的,我想基本只要写过一丢丢代码的人已经都非常清楚了.今天这个题目是一个非常简单但是也很经典地用到栈这个数据结构的题,废话不多说,原题链接如下: Loadi ...

  2. 第3关:利用栈判断字符串是否为回文串

    #ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...

  3. java 数据结构实例_数据结构(Java)——栈的实例

    惟大英雄能本色,是真名士自风流 --易中天(百家讲坛) 1.表达式的转换 1.1 中缀表达式转前缀表达式 中缀表达式转前缀表达式有许多的方式,有加括号去除法.语法树遍历法.堆栈处理法1. 测试程序的实 ...

  4. python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...

    本文实例讲述了JS使用栈判断给定字符串是否是回文算法.分享给大家供大家参考,具体如下: /*使用栈stack类的实现*/ function stack() { this.dataStore = []; ...

  5. 第2关:利用栈判断字符串括号是否匹配

    #ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...

  6. 栈的top指针指向哪里_数据结构-栈

    数据结构-栈 更简单的介绍,在<程序是怎样跑起来的>一书中有简要形象的说明 一.栈的基本概念 栈是一种特殊的线性表,其插入删除操作都只能在表的尾部进行. 栈中允许插入.删除操作的一端称为栈 ...

  7. java 堆和栈 数据结构_数据结构的栈和堆和程序中的堆和栈

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认识 ...

  8. ios 怎么判断字符串的字节数_如何用IOS判断字符串是不是纯数字

    我们在开发项目的时候经常会需要我们只输入一段纯数字,当我们在输入这段数字后就需要对字符串进行判断,看看是不是符合纯数字,那么你知道如何用IOS判断字符串是不是纯数字吗? 下面介绍几种判断字符串是否为纯 ...

  9. JAVA判断字符串以什么什么开始_字符串不能以什么开头 Java 判断字符串是否以什么开头...

    javascript怎么判断字符串是以什么开头的js中怎么判断一个字符串是以某个具体的字符串开头的? Java 判断字符串是否以什么开头 可以使用 startsWith() 判断,例如: String ...

  10. python判断字符串是否回文_判断字符串是否为回文 python

    回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...

最新文章

  1. 远程监控 – 数据采集管道
  2. Android启动Activity的两种方式与四种启动模式
  3. java8获取实现某个接口的所有类_Java 试题八
  4. Objects非空判断_requireNonNull方法
  5. Asp.Net第一章入门之后台处理程序
  6. python numpy np.array_Python | numpy | np.split()与np.array_split()函数
  7. There is no public key available for the following key IDs: 3B4FE6ACC0B21F32
  8. python人工自动抠图_python实现人工智能Ai抠图功能
  9. .Net Attribute特性
  10. 中央民族大学计算机专业研究生,信息工程学院
  11. ORACLE报错:enviroment variable ORACLE_SID not defined,please define int
  12. 改善C#公共程序类库质量的10种方法
  13. 关于在VMware上装lFEDORA系统
  14. 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
  15. 2010年会考计算机试题,2010年浙江省信息技术会考试题 选择题 - 多媒体 - 图文
  16. VSCode远程连接服务器报错:Could not establish connection to “xxx”,Faild to write install script to path!【已解决】
  17. 国内外知名云服务公司介绍
  18. 大数据技术之Hadoop(HDFS)第2章 HFDS的Shell操作
  19. CodeBlocks中文汉化Code::Blocks 10.05 中文版
  20. java.io.IOException: Resetting to invalid mark

热门文章

  1. 查询名字重复但不是相同的人的记录
  2. 10张图带你彻底搞懂限流、熔断、服务降级
  3. 软件测试影响最深的bug,软件测试面试题-那些让我印象深刻的bug
  4. 在linux上压缩文件,Linux上压缩文件的 5 种方法
  5. java数据过载_java区分过载的方法
  6. excel午晚加班考勤统计(excel快速计算午多少个和晚多少个)
  7. 基于lvs实现的高并发负载的实战
  8. 关于php的外文论文,php毕业设计外文翻译--通过PHP访问MySQL(适用于毕业论文外文翻译+中英文对照).doc...
  9. 数学分析高等代数考研试题不断更新中
  10. GDELT数据介绍/GDELT项目官方文档翻译