经典数据结构系列之:栈的应用
作者:互联网
1、前言
数据结构,是计算机编程中对数据存储最基本的操作,不同的数据结构适用不同的业务场景。如今大部分情况都是调用开发API封装好的类库,直接调用,几乎不需要程序员再去深究其中背后实现的逻辑,大大简化和减低了对程序员的要求。正是这种,知其然而不知其所以然,导致很多程序员缺乏对于底层结构的了解,分不清楚不同数据结构之间的性能差异,导致出现很多系统性能问题。
2、原理推导
栈的运用,栈是一种特殊的线性表(线性表是一种顺序表,一种线性结构序列。),只能在表的顶端进行删除或插入操作,遵循"后进先出"(FILO)原则。
利用栈的特性,实现字符串倒序: "hello world!"
实现字符串倒序的方法有很多,比如,我们常用的循环实现倒序。
public void reverseString(String str) {
char[] chr = str.toCharArray();
for (int i = chr.length - 1; i >= 0; i--) {
System.out.print(chr[i]);
}
}
利用栈来实现这个倒序的案例,可以很好的把栈的思想和实现方式完整的体现出来。
#步骤说明
1.将字符串按照char类型转换
2.将字符依次入栈
3.将字符依次从栈中取出,构成倒序之后的字符串
3、代码示例
# 栈的基本操作服务类
/**
* 栈的基本实现
*/
public class StackService {
private char[] stackDatas; //用一维数组存储栈的数据
private int topIndex = -1;
public StackService(int length){
stackDatas = new char[length];
}
/**
* 数据入栈,先入栈的数据后出
* @param data
*/
public void stackPush(char data){
topIndex++;
stackDatas[topIndex] = data;
}
/**
* 数据出栈,后入栈的数据先出
* @return
*/
public char stackPop(){
char data = stackDatas[topIndex];
topIndex--;
return data;
}
/**
* 查询当前栈顶数据
* @return
*/
public char stackPeek(){
return stackDatas[topIndex];
}
/**
* 栈内数据是否已经清空
* @return
*/
public boolean isEmpyt(){
return topIndex == -1;
}
/**
* 打印栈内数据
*/
public void printStack(){
System.out.println("-----思维的持续-----");
for (int i=0;i<topIndex;i++){
System.out.println(stackDatas[i]);
}
}
}
# 利用栈完成对字符串“hello world!”的倒序实现类
/**
* 使用栈完成字符的倒序
*/
public class StackReverse {
public String charsReverse(String data){
StackService stackService = new StackService(20);
StringBuffer stringBuffer = new StringBuffer();
//1.将字符串按照char类型转换
char [] dataChars = data.toCharArray();
//2.将字符依次入栈
for (char c: dataChars) {
stackService.stackPush(c);
}
//3.将字符依次从栈中取出,构成倒序之后的字符串
while (!stackService.isEmpyt()){
stringBuffer.append(stackService.stackPop());
}
return stringBuffer.toString();
}
public static void main(String[] args) {
String reverseStr = "hello world!";
StackReverse stackReverse = new StackReverse();
System.out.println("-----正序-----:"+reverseStr);
String reverseResult = stackReverse.charsReverse(reverseStr);
System.out.println("-----倒序-----:"+reverseResult);
}
}
4、禅定时刻
栈的运用,主要是利用栈先入后出的特性,解决实际业务场景中需要的解决方案,在操作系统和虚拟机实现上都广泛的使用了栈的实现,得益于栈的的时间复杂度都是常数O(1),没有移动和复制上的开销。
标签:数据结构,系列,char,topIndex,经典,return,倒序,data,public 来源: https://www.cnblogs.com/swdcx/p/12516498.html