Java数据结构——栈

//=================================================
// 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数据结构——栈的更多相关文章
- java数据结构——栈(Stack)
学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...
- java 数据结构 栈的实现
java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...
- java数据结构 栈stack
栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构. 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部. 当你从栈中取元素的时候,就从栈顶 ...
- Java数据结构——栈的应用(以数制转换为例子)
看一万遍,不如自己动手实践,请不要直接copy代码,先自己去理解例子实现的原理,然后试着自己动手去实践. 用Java去实现栈操作,会用到stack这个类,这类中有几个方法需要知道他们的用法 bool ...
- JAVA数据结构-----栈
栈是Vector的一个子类,它实现了一个标准的后进先出的栈. 堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 栈常用的五个方法: bo ...
- Java数据结构和算法(四)赫夫曼树
Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- java数据结构与算法之栈(Stack)设计与实现
本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...
随机推荐
- Android 轻量级输入校验库:Fire Eye
Fire Eye是一款轻量级简单易用的Android校验库. FireEye 2.0 在 1.0 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...
- 0924Linux常用命令
写的不错 转载了,有需要的同学们,可以多多学习,适合小白哦 http://blog.csdn.net/xiaoguaihai/article/details/8705992/ 关于最后增加一点 tar ...
- HIbernate的对象状态
*临时状态对象: session中没有缓存,且在数据库中没有对应数据. User user1=new User(null,"c50",18); *持久化状态对象: session中 ...
- LINUX中简单的字符命令
1. ls 查看目录中的内容 -a 查看隐藏文件 -l 显示文件的详细信息 -d 显示目录属性 -h 人性化显示文件大小 -i 显示ID号 2. 目录操作 创建目录 mkdir [-p](递归) di ...
- sql-将查询字段拼接起来
sql语句 select (a + b) as c mysql不起作用
- 微信支付系列(2)——jsapi支付源码解析
版权声明:转载请注明出处:http://blog.csdn.net/m0sh1 http://www.share345.com 在微信支付 开发者文档页面 下载最新的 PHP SDK http://m ...
- 在浏览器中输入URL后执行的全部过程的个人总结
这个问题经常可以看到,今天我好好总结了下,是从网络模型的角度来分析问题的,主要涉及应用层:DNS,HTTP,传输层:TCP,网络层:IP和路由选择协议:RIP,OSPF(内部网关协议),BGP(外部网 ...
- win7 系统无法复制粘贴解决方案
用远程桌面登陆服务器不能在本机和远程服务器之间粘贴文本了,即不能从本机复制文本粘贴到服务器,也不能从服务器复制文本粘贴到本机. 以下是解决方法之一,试了几次都很管用户:在服务器上打开任务管理器,查看进 ...
- js-JavaScript高级程序设计学习笔记9
依然第十三章 事件 1.页面上的所有元素都支持鼠标事件,除了mouseenter和mouseleave,所有鼠标事件都会冒泡. 2.修改键:shift.ctrl.alt.meta.四个属性表示修改键的 ...
- android备忘录
1.跑马灯-滚动字幕 多用于广告,在屏幕上方滚动显示,可以是文字,图片等 #滚动字幕 TextView 中加(singleLine="true",ellipsize="m ...