栈特点:后进先出
类似于堆盘子。第一个放下的盘子一定是在底部( 在栈中的就叫push(压入)),最后一个盘子在顶部;当你想用盘子的时候,一定是从顶部拿起(在栈中就叫做pop(弹出))。
参考别人的代码实现了简单的栈,但是遇到了一个问题
//栈实现
public class StrStack{
private int indexTop = -1;
private int maxSize;
private char [] box;
//获取字符串长度,初始化字符数组
public StrStack(int max){
maxSize = max;
box = new char[maxSize];
}
//添加字符
public void push(char ch){
box[++indexTop] = ch;
}
//取出字符数组
public char pop (){
return box[indexTop--];
}
//添加字符数组元素时,是数组下标达到字符数组最大下标
//取数组元素时,从最大值开始递减取出字符
//添加数组可以从数组最后一个位置存放,然后从第一个的位置取,这个没影响
public boolean isEmpty(){
if(indexTop == -1){
return true;
}else{
return false;
}
}
}
//测试类
public class Main {
public static void main(String args[]) {
String name = "wangyuanwai";
//获取字符串的长度
int max = name.length();
//创建指定长度的StrStack对象
StrStack stack = new StrStack(max);
//把String转化为字符数组,存入StrStack对象的数组中
for(int i = 0 ; i < max; i++) {
stack.push(name.charAt(i));
}
//通过for循环获取字符数组数组的内容,转换为String
String reverse ="";
for(int i = 0; i < max; i++) {
char temp = stack.pop();
reverse += temp;
}
//输出字符串
System.err.println(reverse);
}
}
本来以为在存了一次String变量之后,再去出来之后,indexTop为-1,但栈不为空,-1不能作为栈是否为空的标准
但在试着再去取栈里时,我明白了,发现要想再获取一次栈内的数据,必须调用pop方法,indexTop必须再自减,但此时indexTop已经为-1了,取不出来了,相当于栈空了.
public char pop (){
return box[indexTop--];
}
public boolean isEmpty(){
if(indexTop == -1){
return true;
}else{
return false;
}
}
网友评论