Java数据结构——栈

时间:2022-05-12 06:18:20

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+"、");
}
} }

Java数据结构——栈

//=================================================
// 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);
} }

Java数据结构——栈

Java数据结构——栈

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数据结构与算法之栈&lpar;Stack&rpar;实现

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

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

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

随机推荐

  1. Nova PhoneGap框架 第三章 页面

    页面在项目架构中是一个很重要的概念,它让我们能够将一个功能复杂的项目拆分成一个一个功能比较独立的小区域,这极大的提高了代码的可读性和可维护性. 在我们这个框架中,一个页面由JS和HTML两部分组成,首 ...

  2. C&plus;&plus; 中的sort排序用法

    STL中就自带了排序函数sortsort 对给定区间所有元素进行排序 要使用此函数只需用#include <algorithm> sort即可使用,语法描述为:sort(begin,end ...

  3. 实验三——for语句及分支结构else-if

    1.本节课学习到的知识点: (1)for语句是循环语句,它可以实现c语句的重复执行 (2)for语句中的3个表达式的执行顺序和书写顺序不同 (3)遇到复合语句时要用大括号将几句话括起来,复合语句在语法 ...

  4. Linux FTP配置文件说明

    一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问 ...

  5. 自定义Toast的显示效果

    Activity: package com.example.editortoast; import android.app.Activity; import android.os.Bundle; im ...

  6. ELF--动态链接

    对前面add.c稍作修改, #include <stdio.h>int add_count = 0; extern int sum_count;extern void print_log( ...

  7. &lbrack;HMLY&rsqb;5&period;模仿喜马拉雅 FM

    项目介绍: 文:HansRove(github)XiMaLaYa-by-HansRove- 仿做喜马拉雅, 对AVFoundation框架的一次尝试   软件环境: iOS9.1硬件环境: Mac O ...

  8. Openjudge-计算概论(A)-放苹果

    描述: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法.输入第一行是测试数据的数目t(0 <= t < ...

  9. UVA 10200 Prime Time (打表)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  10. Oracle数据库(三)表操作,连接查询,分页

    复制表 --复制表 create table new_table as select * from Product --复制表结构不要数据 在where后面跟一个不成立的条件,就会仅复制表的结构而不复 ...