上一篇我们自定义了栈和队列。本篇使用栈结构来完成一个功能,看看他的应用。会分两篇讲解。本篇需求:设计一个栈结构,实现字符串的反转,字符串不包括汉子。
过程如下,因为代码做了很详细的解释。没有必要再去讲解代码的细节了。
1、自定义栈结构
package stacktest;
/**
* 需求:使用栈结构,实现单词逆序
*
* @author Howard 使用栈完成,字符串倒叙
*/
public class MyStack {
//记录数组大小
private int arrSize;
//底层使用数组
private char[] charArray;
//定义头指针
private int top;
public MyStack(int arrSize) {
this.arrSize = arrSize;
charArray = new char[arrSize];
top = -1;
}
/**
* 压栈,存储数据
* @param value
*/
public void push(char value){
charArray[++top] = value;
}
/**
* 出栈
* @return
*/
public char pop(){
return charArray[top--];
}
/**
* 判断是否空
* @return
*/
public boolean isEmpty(){
return top == -1;
}
/**
* 判断是否满栈
* @return
*/
public boolean isFull(){
return top == arrSize;
}
/**
* 查看当前栈顶数据
* @return
*/
public char peek(){
return charArray[top];
}
}
2、定义反转功能的类,但是底层使用上边自定义的栈结构实现:
package stacktest;
/**
* 用于反转作用的工具类
* @author Howard
* 底层使用栈结构
*思路:
* 先把数据存入栈,再依次弹出栈并做拼接
*/
public class Reverse {
//输入的字符串
private String input;
//输出的反转后的字符串
private String result;
//字符串的长度
private int strSize;
public Reverse(String input){
this.input = input;
strSize = input.length();
result = "";
}
/**
* 做字符串反转功能
* @return
*/
public String doReverse(){
//初始化栈有多大,跟字符串长度一样
MyStack myStack = new MyStack(strSize);
for (int i = 0; i < strSize; i++) {
//把字符串 “抛开”,每个字符都压栈
myStack.push(input.charAt(i));
}
//弹栈,并把每次弹出的单个字符进行依次拼接
while(!myStack.isEmpty()){
char c = myStack.pop();
result += c;
}
return result;
}
}
3、测试功能:
package stacktest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
* 测试功能
* @author Howard
*
*/
public class TestReverse {
public static void main(String[] args) {
//键盘录入数据。使用转换流
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请输入字符串:");
try {
String inputStr = reader.readLine();
if(inputStr.equals("")){
//输入空串,跳出循环
break;
}
//拿到自定义的反转功能实例
Reverse reverse = new Reverse(inputStr);
String result = reverse.doReverse();
System.out.println("反转后的数据为:"+result);
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("结束反转");
}
}
欢迎关注本公众号,一起交流Android、java、设计模式等知识~
控制台输入输出如下:
请输入字符串:
abc
反转后的数据为:cba
请输入字符串:
ABC
反转后的数据为:CBA
请输入字符串:
%^*
反转后的数据为:*^%
请输入字符串:
结束反转
喜欢我的朋友可以关注公众号,最早通知博客更新,还有其他的文章。值得阅读
微信搜索公众号 codeHoward 即可。