创建一个对象类包括栈的创建和对栈的基本操作
(一)、简单调用
package com.company;
public class StackX {
private int maxSize;
private long [] stackArray;
private int top;
public StackX(int s){
maxSize=s;
stackArray=new long[maxSize];
top=-1;
}
//压栈操作
public void push(long j){
stackArray[++top]=j;
}
//出栈操作
public long pop(){
return stackArray[top--];
}
//返回栈顶
public long peak(){
return stackArray[top];
}
//判断栈是否为空
public boolean isEmpty(){
return (top==-1);
}
//判断栈是否为满
public boolean isFull(){
return(top==maxSize-1);
}
}
package com.company;
import java.util.Random;
public class StackApp {
public static void main(String[] args) {
StackX theStack=new StackX(10);
Random r=new Random();
for(int i=0;i<5;i++){
long temp=r.nextInt(100);
theStack.push(temp);
}
while(!theStack.isEmpty()){
long value=theStack.pop();
System.out.print(value);
System.out.print(" ");
}
System.out.print("");
}
}
(二)倒序字符输出
package com.company;
//定义能够对字符处理的基本栈
public class StackX {
private int maxSize;
private char [] stackArray;
private int top;
public StackX(int max){
maxSize=max;
stackArray=new char[maxSize];
top=-1;
}
public void push(char j){
stackArray[++top]=j;
}
public char pop(){
return stackArray[top--];
}
public char peak(){
return stackArray[top];
}
public boolean isEmpty(){
return (top==-1);
}
public boolean isFull(){
return(top==maxSize-1);
}
}
//逆序操作无非就是出栈操作
package com.company;
public class Reverse {
private String input;
private String output;
public Reverse(String in){
input=in;
}
public String doRev(){
int stackSize=input.length();
StackX thStack=new StackX(stackSize);
for(int j=0;j<input.length();j++){
//charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
char ch=input.charAt(j);
thStack.push(ch);
}
output="";
while(!thStack.isEmpty()){
char ch=thStack.pop();
output=output+ch;
}
return output;
}
}
package com.company;
import java.io.*;
public class ReverseApp {
public static void main(String[] args) throws IOException {
String input,output;
while(true){
System.out.print("Enter a string");
//flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。
System.out.flush();
input=getString();
if(input.equals(""))
break;
Reverse theReverse=new Reverse(input);
output=theReverse.doRev();
System.out.println("Reverse: "+output);
}
}
public static String getString() throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String s=br.readLine();
return s;
}
}
三、分隔符匹配
package com.company;
public class StackX {
。。。。。。char型的stack。。。
}
package com.company;
public class BracketChecker {
private String input;
public BracketChecker(String in) {
input = in;
}
public void check() {
int stackSize = input.length();
StackX theStack = new StackX(stackSize);
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '{':
case '[':
case '(':
theStack.push(ch);
break;
case '}':
case ']':
case ')':
if (!theStack.isEmpty()) {
char chx = theStack.pop();
if ((ch == '}' && chx != '{') || (ch == '[' && chx != ']') ||
(ch == '(' && chx != ')'))
System.out.println("Error:" + ch + "at" + j);
} else
System.out.println("Error:" + ch + "at" + j);
break;
default:
break;
}
if (!theStack.isEmpty())
System.out.println("Error: missing right delimiyter");
}
}
}
package com.company;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BracketsApp {
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(""))
break;
BracketChecker theChecker=new BracketChecker(input);
theChecker.check();
}
}
public static String getString() throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String s=br.readLine();
return s;
}
}