Java如何使用堆疊來反轉字串?

2019-10-16 22:29:05

在Java程式設計中,如何使用堆疊來反轉字串?

以下範例顯示了如何使用堆疊在使用者自定義的StringReverserThroughStack()方法來反轉字串。

package com.yiibai;

import java.io.IOException;

public class StringReversalUsingStack {
    private String input;
    private String output;

    public StringReversalUsingStack(String in) {
        input = in;
    }

    public String doRev() {
        int stackSize = input.length();
        Stack theStack = new Stack(stackSize);

        for (int i = 0; i < input.length(); i++) {
            char ch = input.charAt(i);
            theStack.push(ch);
        }
        output = "";
        while (!theStack.isEmpty()) {
            char ch = theStack.pop();
            output = output + ch;
        }
        return output;
    }

    public static void main(String[] args) throws IOException {
        String input = "Java String And Stack";
        String output;
        StringReversalUsingStack theReverser = new StringReversalUsingStack(input);
        output = theReverser.doRev();
        System.out.println("Reversed: " + output);
    }

    class Stack {
        private int maxSize;
        private char[] stackArray;
        private int top;

        public Stack(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 peek() {
            return stackArray[top];
        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
}

上述程式碼範例將產生以下結果 -

Reversed: kcatS dnA gnirtS avaJ

範例-2

以下是使用堆疊來反轉字串的另一個範例。

package com.yiibai;

import java.util.Scanner;

class Stack3 {
    private int maxSize;
    private char[] stackArray;
    private int top;

    public Stack3(int s) {
        maxSize = s;
        stackArray = new char[maxSize];
        top = -1;
    }

    public void push(char j) {
        stackArray[++top] = j;
    }

    public char pop() {
        return stackArray[top--];
    }

    public char peek() {
        return stackArray[top];
    }

    public boolean isEmpty() {
        return (top == -1);
    }

    public boolean isFull() {
        return (top == maxSize - 1);
    }
}

public class StringReversalUsingStack2 {
    public static void main(String[] args) {
        System.out.println("Enter a sentence: ");
        Scanner scan = new Scanner(System.in);
        String input = scan.nextLine();
        int stackSize = input.length();
        Stack3 theStack = new Stack3(stackSize);

        for (int j = 0; j < input.length(); j++) {
            char ch = input.charAt(j);
            theStack.push(ch);
        }
        while (!theStack.isEmpty()) {
            char ch = theStack.pop();
            System.out.print(ch);
        }
    }
}

上述程式碼範例將產生以下結果 -

Enter a sentence: 
123abc
cba321