栈编写及其实例应用

 创建一个对象类包括栈的创建和对栈的基本操作

(一)、简单调用

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;
    }
}



 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值