//=================================================
// File Name : Stack_demo
//------------------------------------------------------------------------------
// Author : Common //类名:Stack
//属性:
//方法:
class Stack{
private int maxSize; //栈的长度
private long[] stackArray; //创建栈的数组的引用
private int top; //创建栈顶的引用 public Stack(int s) { //构造函数
this.maxSize = s;
stackArray = new long[maxSize]; //创建对象
top = -1; //栈顶等于-1
} public void push(long j){ //入栈操作
stackArray[++top] = j; //先把top=-1自加成0,再入栈
} public long pop(){
return stackArray[top--]; //弹出当前栈顶的元素后,再自减
} public long peek(){
return stackArray[top]; //返回当前栈顶的元素
} public boolean isEmpty(){ //栈顶为-1,即栈为空
return (top == -1);
} public boolean isFull(){ //栈顶为maxSize-1,即栈为满
return (top == maxSize-1);
} } //主类
//Function : Stack_demo
public class Stack_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
Stack stack_demo = new Stack(10);
stack_demo.push(50);
stack_demo.push(60);
stack_demo.push(70);
stack_demo.push(80); while(!stack_demo.isEmpty()){ //当栈不为空
long value = stack_demo.pop();
System.out.print(value+"、");
}
} }

//=================================================
// File Name : Word_Reverse
//------------------------------------------------------------------------------
// Author : Common //类名:Stack_Char
//属性:
//方法:
class Stack_Char{
private int maxSize; //栈的长度
private char[] stackArray; //创建栈的数组的引用
private int top; //创建栈顶的引用 public Stack_Char(int s) { //构造函数
this.maxSize = s;
stackArray = new char[maxSize]; //创建对象
top = -1; //栈顶等于-1
} public void push(char j){ //入栈操作
stackArray[++top] = j; //先把top=-1自加成0,再入栈
} public char pop(){
return stackArray[top--]; //弹出当前栈顶的元素后,再自减
} public char peek(){
return stackArray[top]; //返回当前栈顶的元素
} public boolean isEmpty(){ //栈顶为-1,即栈为空
return (top == -1);
} public boolean isFull(){ //栈顶为maxSize-1,即栈为满
return (top == maxSize-1);
} } //类名:Reverse
//属性:
//方法:
class Reverse{
private String input;
private String output; public Reverse(String input) { //构造函数
super();
this.input = input;
} public String DoReverse(){
int stackSize = input.length();
Stack_Char stack_demo = new Stack_Char(stackSize); for(int i=0;i<stackSize;i++){ //把每一个字母入栈
char ch = input.charAt(i);
stack_demo.push(ch);
}
output = ""; //给output赋值,否则会变成nullXXX
while( !stack_demo.isEmpty() ){ //把每一个字母出栈
char ch = stack_demo.pop();
this.output += ch;
}
return this.output;
} } //主类
//Function : Word_Reverse
public class Word_Reverse { public static void main(String[] args) {
// TODO 自动生成的方法存根
String input,output;
input = "part";
System.out.println("输入的字符串:"+input);
Reverse rev = new Reverse(input);
output = rev.DoReverse();
System.out.println("输出的字符串:"+output);
} }

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; //=================================================
// File Name : Brackets_demo
//------------------------------------------------------------------------------
// Author : Common //类名:BracketsChecker
//属性:
//方法:
class BracketsChecker{
private String input; public BracketsChecker(String input) { //构造函数
super();
this.input = input;
} public void Check(){
int stackSize = input.length();
Stack_Char stack_demo = new Stack_Char(stackSize); for(int i=0;i<input.length();i++){
char ch = input.charAt(i); //遍历每一个字符
switch(ch){
case '{':
case '[':
case '(':
stack_demo.push(ch); //遇到'{[('就入栈
break; case '}':
case ']':
case ')':
if( !stack_demo.isEmpty()){
char chx = stack_demo.pop(); //遇到'}])'弹出堆栈
if( (chx=='{' && ch!='}') || (chx=='[' && ch!=']') || (chx=='(' && ch!=')')){
System.out.println("Error:右括号不应该是"+ch+" at "+i);
}
}
else{
System.out.println("Error:只有右括号"+ch+" at "+i);
}
break;
default:break;
}
}
if( !stack_demo.isEmpty()){ //如果栈不为空的话,证明缺少右括号
System.out.println("Error:缺少右括号");
}
}
} //主类
//Function : Brackets_demo
public class Brackets_demo { public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
String input;
// input = "{[(]}";
System.out.print("输入字符串:");
input = getString();
System.out.println("输入的字符串为:"+input);
BracketsChecker che = new BracketsChecker(input);
che.Check();
} public static String getString() throws IOException{
InputStreamReader isr = new InputStreamReader(System.in); //把输入的字节流转换成字符流
BufferedReader br = new BufferedReader(isr); //只能接收字符输入流的实例
String str = br.readLine(); //一次性从缓冲区中读取内容
return str;
} }

Java数据结构——栈的更多相关文章

  1. java数据结构——栈(Stack)

    学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...

  2. java 数据结构 栈的实现

    java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...

  3. java数据结构 栈stack

    栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构. 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部. 当你从栈中取元素的时候,就从栈顶 ...

  4. Java数据结构——栈的应用(以数制转换为例子)

    看一万遍,不如自己动手实践,请不要直接copy代码,先自己去理解例子实现的原理,然后试着自己动手去实践. 用Java去实现栈操作,会用到stack这个类,这类中有几个方法需要知道他们的用法  bool ...

  5. JAVA数据结构-----栈

    栈是Vector的一个子类,它实现了一个标准的后进先出的栈. 堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 栈常用的五个方法: bo ...

  6. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

  7. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  8. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  9. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

随机推荐

  1. android之二维码扫描的实现

    二维码扫描引擎有 ZBar 和ZXing 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技 ...

  2. 对象关系映射ORM

    对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效 ...

  3. 概率DP light oj 1038

    t个数据 然后一个n 输出变成1的期望 看个数据 dp[n]代表n变成1的期望 cnt代表因子个数 pi代表因子 那么dp[n]=1/cnt*(dp[n/p1]+1)+1/cnt*(dp[n/p2]+ ...

  4. linux下截取整个网页

    前提需要安装 gimp图片处理软件 打开gimp 文件-创建-从网页  然后输入网页地址就可以截取整个网页了

  5. Oracle-函数Decode进行多值判断

    decode函数比较表达式和搜索字,如果匹配,返回结果:如果不匹配,返回default值:如果未定义default值,则返回空值 Decode函数的语法结构如下: decode (expression ...

  6. composer更新不成功,启用国内镜像网站的配置更改办法

    通过 composer config -l -g 命令可以列出 composer 的全局配置信息 [home] 配置项就是 composer 的主目录 修改config.json { "co ...

  7. 用select实现监控终端输入

    首先,从man手册里找到对select函数的描述,如下: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptf ...

  8. Unity 移动端触摸屏操作

    Unity 触屏操作 当将Unity游戏运行到IOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的触屏操作,但如多点触屏等操作却是无法利用鼠标操作进行的.Unity的Input类 ...

  9. BZOJ 4144: [AMPPZ2014]Petrol

    4144: [AMPPZ2014]Petrol Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 457  Solved: 170[Submit][Sta ...

  10. js-JavaScript高级程序设计学习笔记11

    依然第十四章 1.选择部分文本:使用setSelectionRange()方法,两个参数为第一个字符的索引和最后一个字符之后的索引,类似于substring()方法. 2.IE8及更早版本使用范围选择 ...