这里主要介绍如何用代码来实现一个栈,并附上了一个简单的栈的应用,并没有具体介绍栈。

是一种特殊的存储结构,遵循先进后出(First in last out)的原则。在栈中,只允许访问一个数据项,即最后插入的数据项,只有当前的栈顶元素出栈之后,才能访问下一个元素。接下来,我们来看一下如何实现一个栈。解释都在代码中:

package stackTest;

//这是新建的作为栈的类
public class StackX { private int maxSize;          //用于设置栈的容量大小private long[] stackArray;    //用数组来存储栈的数据,这里只能存储long型的数据private int Top;             //栈的头指针//结构体,初始化数据public StackX(int s){maxSize = s;        stackArray = new long[maxSize];Top = -1;}//入栈方法,Top先自加,在为数组赋值public void push(int value){stackArray[++Top] = value;}//出栈方法public long pop(){return stackArray[Top--];}//查询当前栈顶元素public void peek(){System.out.println(stackArray[Top]);}//判断是否为空栈public boolean isEmpty(){return (Top == -1);}//判断栈是否已经满了public boolean isFull(){return (Top == maxSize-1);}
}

有兴趣的博友可以新建一个类,调用里面的方法来实现出栈和入栈。下面我们来用栈来实现一个简单的操作:

分隔符匹匹配:分割符包括{、}、(、)、[、]、每个左分隔符都需要和右分隔符相匹配。同时先出现的左分割符应该比后出现的左分割符晚匹配

如c[b]              正确

a{b[c]d}e   正确

a{b[c}d]e   错误

a[b       错误

1.新建一个作为栈的类,可以将上面的改一下,改为能存储字符串的栈

2.在新建一个类,用来实现匹配检测的方法:

//用于分隔符的匹配方法类
public class Bracker {private String input;public Bracker(String in){input = in;}public void check(){//将传入的input字符串长,作为栈的大小int maxSize = input.length();StackX sX = new StackX(maxSize);//将输入的分割符入栈for (int i = 0; i < input.length(); i++) {//调用charAt方法,依次得到input字符串的每个字符char ch = input.charAt(i);switch (ch) {case '{':case '[':case '(':sX.push(ch);break;case ')':case '}':case ']':if (!sX.isEmpty()) {char chx = sX.pop();if (ch == ')'&&chx != '('||ch == ']'&&chx != '['||ch == '}'&&chx != '{') {System.out.println("ERROR:" + ch + " at " + i);}}break;default:break;}}//最后sX没有完全出栈的话,证明左右分割符不对等if (!sX.isEmpty()) {System.out.println("Error:missing right delimiter");}}
}

主类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class BrackerApp {public static void main(String[] args) throws IOException{String input ;while(true){System.out.println("Enter string containing delimiters");System.out.flush();   //强制将缓冲区中的数据发送出去,而不必等到缓冲区满input = getString();if (input.equals("")) {System.out.println("你没有输入:");}//新建一个Bracker对象Bracker bracker = new Bracker(input);bracker.check();}}public static String getString() throws IOException{//读取输入流InputStreamReader in = new InputStreamReader(System.in);//将输入流中的数据放进br中BufferedReader br = new BufferedReader(in);//读取br中的一行数据String s = br.readLine();return s;}
}

运行结果:

Enter string containing delimiters
a[b{c}d]e
Enter string containing delimiters
a[b(c}d]
ERROR:} at 5
Enter string containing delimiters

转载于:https://www.cnblogs.com/mercuryli/p/4995899.html

算法 之 栈的简单讲解相关推荐

  1. yolo系列算法思想流程简单讲解概述————(究极简单的讲述和理解)

           在我想学习算法的时候,我看某些大佬特别喜欢上来就讲论文,给我搞的贼难受,毕竟本人太辣鸡了,上来这么搞看不懂,经过诸多算法的这样折磨.我打算根据自己的亲身经历和学习过程中遇到的问题出一期, ...

  2. RCNN算法思想简单讲解概述————(究极简单的讲述和理解)

           学习的过程中发现一个问题,如果不能大概的了解一下一个算法的思想直接去看他的论文,或者去看他算法的讲解就很痛苦,看不懂,学的效率也非常低,类似我之前发的RCNN论文精度的博客.RCNN目标 ...

  3. java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现

    简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...

  4. Python实现二分查找算法,图片结合代码讲解,简单易懂

    Python实现二分查找算法,图片结合代码讲解,简单易懂 二分查找是指在一个数组中循环找到特定的目标元素的一种算法,二分查找算法要求这个数组必须是有序的,如果不是有序则最后得出的结果是不准确的,因为其 ...

  5. 算法总结——栈与队列

    算法总结--栈与队列 一.栈与队列理论基础 用栈实现队列 Python版本 三.用队列实现栈 Python版本 四.有效的括号 Python版本 五.删除字符串中的所有相邻重复项 Python版本 六 ...

  6. Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

        Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...

  7. python栈是什么意思_Python算法之栈(stack)的实现

    本文以实例形式展示了Python算法中栈(stack)的实现,对于学习数据结构域算法有一定的参考借鉴价值.具体内容如下: 1.栈stack通常的操作: Stack() 建立一个空的栈对象 push() ...

  8. 算法学习笔记:简单数据结构及排序算法

    原学习视频跳转地址:https://www.bilibili.com/video/BV13g41157hK?p=2 本文为自学视频整理的简单笔记 目录 排序 冒泡排序 选择排序 插入排序 归并排序(递 ...

  9. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  10. (C语言)静态栈编写简单计算器(感悟与详细解析)

    C语言数据结构静态栈--计算器的实现 下面我来详细的解释一下我编写的计算器代码.... 有必要先说明一下的是,此代码中含有两个栈:数据栈和算符栈: 数据栈:存放double型数字: 算符栈:存放cha ...

最新文章

  1. 深入学习Heritrix---解析CrawlController
  2. 011_布尔值内建函数
  3. AMDD 一个把大问题分成小问题的优化算法
  4. lay弹窗库的一个坑
  5. ABAP 对字符串公式进行计算
  6. Fast CGI 工作原理
  7. protel布线需要注意事项
  8. matlab 常用 api(七)—— 常见判断(返回 logical)
  9. vasp能装在window系统里吗_vasp 5.4.4 在win10/Ubuntu 18.04上的安装
  10. 修改数据文件和日志文件路径
  11. Qt网络编程-简易版TcpServer入门Demo(2)
  12. 抖音数据统计_抖音账号数据分析
  13. 前端新手遇到的问题 ---含“ 文字贯穿线、@font-face、axios ”知识
  14. 全连接网络实现Fashion数据集学习/预测
  15. 顽童时代-----钟丽思
  16. e1000网卡驱动初感受
  17. NANK南卡无线蓝牙耳机体验:身材虽大,续航却格外长
  18. 2022中国大学专业排名公布:集成电路相关专业哪家强?
  19. Greenplum中内存设置不合理导致的报错
  20. 程序实现启用/禁用设备(驱动)enable/disable device with windows api

热门文章

  1. Libliner 中的-s 参数选择:primal 和dual
  2. UDT协议实现分析——数据发送控制
  3. “我来管管看”系列:如何消除报工数据与入库数据的差异?
  4. 第三部分 SOA项目的运维
  5. DNN永日新闻模块(YongRi)免费1.00.09版本下载
  6. 谈智能DNS解析的应用
  7. 软件测试——闭着眼睛测试软件
  8. 用csc手动编译和Ildasm反编译
  9. C#如何快速高效地导出大量数据?
  10. Java程序向MySql数据库中插入的中文数据变成了问号