您的位置 首页 java

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

前面的文章我们讲了 ,并且用数组实现了栈的先进后出。现在我们做一个栈的示例应用-单词逆序。

题目

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

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

代码

栈代码:

 

/**

 * 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()”方法,并显示返回值,这个返回值是逆序的字符串。

文章来源:智云一二三科技

文章标题:JAVA深入学习(栈和队列)栈应用之单词逆序

文章地址:https://www.zhihuclub.com/176294.shtml

关于作者: 智云科技

热门文章

网站地图