首先写两个栈的异常类,分别是栈满和栈空的类:

package com.jim.stack;
public class ExceptionStackEmpty extends RuntimeException{public ExceptionStackEmpty(String err){System.out.println(err);}
}
package com.jim.stack;
public class ExceptionStackFull extends RuntimeException {public ExceptionStackFull(String err){System.out.println(err);}
}

然后编写栈的接口,规定栈的五个基本方法的格式,参数等:

package com.jim.stack;
public interface Stack {public int getSize();public boolean isEmpty();public Object top() throws ExceptionStackEmpty;public void push(Object ele)throws ExceptionStackFull;public Object pop() throws ExceptionStackEmpty;
}

然后写栈的实现(数组的方法):

package com.jim.stack.impl;
import com.jim.stack.ExceptionStackEmpty;
import com.jim.stack.ExceptionStackFull;
import com.jim.stack.Stack;
public class Stack_Array implements Stack {public static final int CAPACITY = 1024;private int capacity;private Object[] obj;private int top = -1;public Stack_Array(){this(CAPACITY);}public Stack_Array(int capacity2) {capacity = capacity2;obj = new Object[capacity];}@Overridepublic int getSize() {return top+1;}@Overridepublic boolean isEmpty() {return (top < 0);}@Overridepublic Object pop() throws ExceptionStackEmpty {Object ele;if(this.isEmpty())throw new ExceptionStackEmpty("异常:栈为空");ele = obj[this.top];obj[top] = null;top--;return ele;}@Overridepublic void push(Object ele) throws ExceptionStackFull{if(this.getSize() == CAPACITY)throw new ExceptionStackFull("异常:栈满");top++;obj[top] = ele;}@Overridepublic Object top() throws ExceptionStackEmpty {if(this.isEmpty())throw new ExceptionStackEmpty("异常:栈空");return obj[this.top];}
}

下面是测试栈的应用:

包括数组的倒序和一些编译器常用的检查符号配对的方法:

package com.jim.test;
import com.jim.stack.impl.Stack_Array;
public class Test {public static Integer[] reverse(Integer[] a) {Stack_Array s = new Stack_Array(a.length);Integer[] b = new Integer[a.length];for (int i = 0; i < a.length; i++)s.push(a[i]);for (int i = 0; i < b.length; i++)b[i] = (Integer) s.pop();return b;}public static void matches(String str){char c[] = str.toCharArray();Stack_Array s = new Stack_Array(c.length);for(int i = 0;i < c.length;i++){if(c[i] == '('){s.push(c[i]);}else if(c[i] == ')'){s.pop();}}if(s.isEmpty()){System.out.println("配对");}else{System.out.println("不配对");}}/*public static void main(String[] args) {Integer[] a = new Integer[5];Integer[] b = new Integer[a.length];for (int i = 0; i < a.length; i++)a[i] = i;System.out.println("交换顺序之前:");for (int i = 0; i < a.length; i++)System.out.print(a[i] + " ");b = reverse(a);System.out.println();System.out.println("交换顺序之后:");for (int i = 0; i < a.length; i++)System.out.print(b[i] + " ");}*/public static void main(String[] args) {String str = "78+89*45/(89+(45-96)+45";matches(str);}}

转载于:https://blog.51cto.com/ywj852752270/1286639

【数据结构】栈的编写以及栈的简单应用相关推荐

  1. 数据结构——C语言编写简单的停车场管理系统(栈和链队实现)

    1.问题描述 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端.最先到达的第一辆车停放在车场的最北端),若车场 ...

  2. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  3. 基于java的数据结构学习——数组实现的栈以及简单应用C++实现

    基于java的数据结构学习--数组实现的栈以及简单应用的 C++ 实现 源码: // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTUR ...

  4. 基于java的数据结构学习——数组实现的栈以及简单应用

    栈 Stack 栈是一种线性结构 相比数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作(撤销) 括 ...

  5. Python__数据结构与算法——表、栈、队列

    目录 一.表 二.栈(后进先出) 三.队列(先进先出) 数据结构使用来描述一种或多种数据元素之间的特定关系,算法是程序设计中对数据操作的描述,数据结构和算法组成了程序.对于简单的任务,只要使用编程语言 ...

  6. c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列

    前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...

  7. 数据结构与算法:09 栈与递归

    09 栈与递归 知识结构: 栈是我们经常使用的一种数据结构,比如,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来.又比如,我们使用的Word.Excel.Photoshop ...

  8. 【数据结构与算法】之栈与队列的应用和操作

    栈 一.概念 栈(stack)又名堆栈,它是一种运算受限的线性表: 限定仅在表尾进行插入和删除操作的线性表.允许插入和删除的一端为栈顶,另一端是栈底. 向一个栈插入新元素又称作进栈.入栈或压栈,它是把 ...

  9. 数据结构与算法JavaScript (一) 栈

    序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...

最新文章

  1. 计算机视觉顶会ECCV 2020中国预会议:日程公开,注册有奖
  2. Bootstrap框架的基本使用
  3. ajax get请求成功,成功()函数的AJAX GET请求
  4. CreateThread和_beginthread的区别
  5. 每天进步一点点《PCA的简要学习》
  6. jenkins集成sonar
  7. Elasticsearch-2.3.x填坑之路
  8. XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用原点null
  9. 计算机桌面程序经常打不开了,电脑开机后桌面软件打不开怎么办
  10. 死在路上的创业者们:如何跨越市场推广之坎?
  11. 服务器应用层次划分,服务器按应用层次划分的话可以分为哪几种?
  12. 记录MATLAB的s函数的使用(一)
  13. 推荐一个好用的百度文库在线免费下载文档网站
  14. 产品读书《产品经理的第二本书》
  15. 测试技术总监需要具备哪些能力
  16. 企业级 Go 项目实战,记住这 5 大核心要点
  17. 清除页面缓存快捷键-避免重新登陆方式
  18. 群晖NAS 7.X搭建本地web服务器并实现公网访问 1/3
  19. 2018.1.27 T2 尤格萨隆的合并石子大作战
  20. 解析飞凌嵌入式i.MX8MM在智慧医疗麻醉系统中的应用方案

热门文章

  1. socket 远程主机强迫关闭了一个现有的连接_Python 之 后门程序编写与远程控制
  2. CSS animation 与 transition 有何区别?
  3. java适合做平台_java不适合做单机web管理平台的2大因素
  4. linux环境搭建pypi源,使用pypi-server搭建简单的PyPI源
  5. php笔试有多少分钟,PHP研发工程师笔试题(半小时)
  6. mysql独立开发_nacos的mysql独立部署
  7. linux测试dvi接口,TeX Live DVI字体数据解析整数溢出漏洞
  8. 硬盘与电线挨着会高温吗_机械硬盘时代徐徐落幕?出货量再减50万件,你还会买新机械盘吗?...
  9. VB中的New 与 CreateObject的区别
  10. 英伟达推出新款“煤气灶”Titan RTX,售价近2万,并开源PhysX SDK