美文网首页
java实现栈

java实现栈

作者: jiyuchen1 | 来源:发表于2018-03-28 20:28 被阅读0次

    栈特点:后进先出

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

          本文链接:https://www.haomeiwen.com/subject/wygucftx.html