java实现栈

栈特点:后进先出

类似于堆盘子。第一个放下的盘子一定是在底部( 在栈中的就叫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;
    }
}

参考自:https://blog.csdn.net/cadi2011/article/details/52551200

你可能感兴趣的:(java实现栈)