java 栈_JAVA深入学习(栈和队列)栈应用之单词逆序

前面的文章我们讲了JAVA深入学习(栈和队列)之栈 ,并且用数组实现了栈的先进后出。现在我们做一个栈的示例应用-单词逆序。

题目

栈的第一个例子是做一件非常简单的事情:单词逆序。运行程序时,提示输入一个单词,回车键【Enter】后,便会显示字幕顺序倒置后的词。

57f679f97b039abf2e12aadf59842376.png

用栈进行单词逆序:首先,字幕从输入的字符串中一个接一个地读取出来并压入栈中。接着它们依次弹出栈,并显示出来。因为栈的先进后出的特性,所以字母的顺序就颠倒过来了。

代码

栈代码:

/** * Created by Bruce on 2020/8/17 **/public class StackOfChar_02 {    private int maxSize;    private char[] stackArray;    private int top;    public StackOfChar_02(int maxSize) {        this.maxSize = maxSize;        stackArray = new char[maxSize];        top = -1;    }    /**     * 是否为空     * @return     */    public boolean isEmpty(){        return top == -1;//栈顶指针为默认值-1,则代表为空    }    /**     * 栈是否已满     * @return     */    public boolean isFull(){        return top == maxSize - 1;//栈顶指针为限制数量-1    }    /**     * 向栈中压入元素     * @param value     * @return     */    public boolean push(char value){        if (isFull()){//已满压入失败//            return false;//实际使用中-可抛出异常处理            throw new RuntimeException("stack is full");        }        stackArray[++top] = value;//栈顶压入-top是在插入数据项之前递增的        return true;    }    /**     * 弹栈     * @return     */    public char pop(){        if(isEmpty()){//栈为空//            return -1;//实际使用中-可抛出异常处理            throw new RuntimeException("stack is empty");        }        return stackArray[top--];//先返回再递减    }    /**     * 查看栈顶元素     * @return     */    public char peek(){        if(isEmpty()){//栈为空返回-1;//            return -1L;//实际使用中-可抛出异常处理            throw new RuntimeException("stack is empty");        }        return stackArray[top];    }}

逆序操作代码:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * Created by Bruce on 2020/8/17 **/public class Reverser {    private String inputStr;    private String outputStr;    public Reverser(String inputStr) {        this.inputStr = inputStr;    }    public String doRev(){        if(inputStr == null || inputStr.length() <= 0){            return null;        }        int length = inputStr.length();//获取输入字符串长度        StackOfChar_02 stack = new StackOfChar_02(length);//按照字符串长度初始化栈空间大小        for(int i = 0; i < length; i++){            stack.push(inputStr.charAt(i));//入栈        }        outputStr = "";        while (!stack.isEmpty()){//栈不为空时候,循环弹栈            outputStr = outputStr + stack.pop();        }        return outputStr;    }    /**     * 获取键盘输入流     * @return     * @throws IOException     */    public static String getSystemInputString() throws IOException {        InputStreamReader in = new InputStreamReader(System.in);        BufferedReader bufferedReader = new BufferedReader(in);        return bufferedReader.readLine();//只获取一行输入//        String finalStr = "";//        String temp;//        while ((temp = bufferedReader.readLine()) != null){//            finalStr = finalStr + temp;//        }//        return finalStr;    }    public static void main(String[] args) throws IOException {        String input,output;        while (true){            System.out.println("Enter a String:");            System.out.flush();            input = getSystemInputString();            System.out.println("inputStr:" + input);            if(input == null || input.length() <= 0 || input.trim().equals("")){//输入数据不能为空,为空则中断                break;            }            Reverser reverser = new Reverser(input);            output = reverser.doRev();            System.out.println("Reverser outputStr:" + output);        }    }}

示例输出:

Enter a String:

bruce

inputStr:bruce

Reverser outputStr:ecurb

Enter a String:

bruce and tom

inputStr:bruce and tom

Reverser outputStr: mot dna ecurb

Enter a String:

inputStr:

Process finished with exit code 0

代码解析

建立Reverse类来处理输入字符串的逆序工作。该类的关键组成部分是“doRev()”方法,该方法利用栈实现逆置操作。在“doRev()”方法中创建了一个栈,它根据输入字符串的长度确定栈的大小。

“main()”方法中由用户输入一个字符串,创建Reverser对象,字符串作为参数传给构造方法,接着调用这个对象的“doRev()”方法,并显示返回值,这个返回值是逆序的字符串。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值