算法 之 栈的简单讲解
这里主要介绍如何用代码来实现一个栈,并附上了一个简单的栈的应用,并没有具体介绍栈。
栈是一种特殊的存储结构,遵循先进后出(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
算法 之 栈的简单讲解相关推荐
- yolo系列算法思想流程简单讲解概述————(究极简单的讲述和理解)
在我想学习算法的时候,我看某些大佬特别喜欢上来就讲论文,给我搞的贼难受,毕竟本人太辣鸡了,上来这么搞看不懂,经过诸多算法的这样折磨.我打算根据自己的亲身经历和学习过程中遇到的问题出一期, ...
- RCNN算法思想简单讲解概述————(究极简单的讲述和理解)
学习的过程中发现一个问题,如果不能大概的了解一下一个算法的思想直接去看他的论文,或者去看他算法的讲解就很痛苦,看不懂,学的效率也非常低,类似我之前发的RCNN论文精度的博客.RCNN目标 ...
- java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现
简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...
- Python实现二分查找算法,图片结合代码讲解,简单易懂
Python实现二分查找算法,图片结合代码讲解,简单易懂 二分查找是指在一个数组中循环找到特定的目标元素的一种算法,二分查找算法要求这个数组必须是有序的,如果不是有序则最后得出的结果是不准确的,因为其 ...
- 算法总结——栈与队列
算法总结--栈与队列 一.栈与队列理论基础 用栈实现队列 Python版本 三.用队列实现栈 Python版本 四.有效的括号 Python版本 五.删除字符串中的所有相邻重复项 Python版本 六 ...
- Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解
Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...
- python栈是什么意思_Python算法之栈(stack)的实现
本文以实例形式展示了Python算法中栈(stack)的实现,对于学习数据结构域算法有一定的参考借鉴价值.具体内容如下: 1.栈stack通常的操作: Stack() 建立一个空的栈对象 push() ...
- 算法学习笔记:简单数据结构及排序算法
原学习视频跳转地址:https://www.bilibili.com/video/BV13g41157hK?p=2 本文为自学视频整理的简单笔记 目录 排序 冒泡排序 选择排序 插入排序 归并排序(递 ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
- (C语言)静态栈编写简单计算器(感悟与详细解析)
C语言数据结构静态栈--计算器的实现 下面我来详细的解释一下我编写的计算器代码.... 有必要先说明一下的是,此代码中含有两个栈:数据栈和算符栈: 数据栈:存放double型数字: 算符栈:存放cha ...
最新文章
- 深入学习Heritrix---解析CrawlController
- 011_布尔值内建函数
- AMDD 一个把大问题分成小问题的优化算法
- lay弹窗库的一个坑
- ABAP 对字符串公式进行计算
- Fast CGI 工作原理
- protel布线需要注意事项
- matlab 常用 api(七)—— 常见判断(返回 logical)
- vasp能装在window系统里吗_vasp 5.4.4 在win10/Ubuntu 18.04上的安装
- 修改数据文件和日志文件路径
- Qt网络编程-简易版TcpServer入门Demo(2)
- 抖音数据统计_抖音账号数据分析
- 前端新手遇到的问题 ---含“ 文字贯穿线、@font-face、axios ”知识
- 全连接网络实现Fashion数据集学习/预测
- 顽童时代-----钟丽思
- e1000网卡驱动初感受
- NANK南卡无线蓝牙耳机体验:身材虽大,续航却格外长
- 2022中国大学专业排名公布:集成电路相关专业哪家强?
- Greenplum中内存设置不合理导致的报错
- 程序实现启用/禁用设备(驱动)enable/disable device with windows api