链栈的java实现

这篇文章讲述的是链栈的java实现,如有错误或者不当之处,还望各位大神批评指正。

栈的特点

  • 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
  • 栈的特点是先入后出

栈的基本操作

  1. 栈的创建 initStack()
  2. 压栈操作 push(Element elem)
  3. 出栈操作 pop()
  4. 计算栈的长度 length()
  5. 清空一个栈 clear()
  6. 依次输出栈顶到栈底的元素 print()

链栈的java实现

/*链栈的java实现*/
class Stack{

    /*定义两个指针目的是分别指向栈底和栈顶*/
    private Element base ;
    private Element top ;

    /*栈中的数据模型*/
    class Element{
        public Object data ;                     //栈中元素
        Element next ;                           //下一个元素
    }

    /*初始化*/
    public void init(){
        Element elem = new Element() ;           //开辟一个元素的空间作为栈底
        base = elem ;                            //top指针和base指针初始化
        top =  elem ;
        base.data = null ;
        //System.out.println("栈已初始化");
    }

    /*压栈操作*/
    public void push(Object obj){
        Element elem = new Element() ;           // 入栈元素分配空间
        elem.data = obj ;                        // 将元素放入
        elem.next = top ;                        // 元素指针指向当前top所指元素
        top = elem ;                             // 修改top指针
        //System.out.println(top.data+" 压栈成功");
    }

    /*退栈操作*/
    public Object pop(){
        if(this.isEmpty()){
            System.out.println("退栈失败,栈为空!");
            return null ;
        }
        Object obj = top.data ;                   //取出对象的值
        top = top.next ;                          //修改top指针
        //System.out.println(obj+" 退栈成功");
        return obj ;                              //返回元素
    }

    /*判断栈是否为空*/
    public boolean isEmpty(){
        if(base == top)                           //若栈顶栈底指针相同,则为空否则非空
            return true ;
        else
            return false ;
    }

    /*清空栈*/
    public void clear(){
        while(!this.isEmpty()){
            this.pop() ;
        }
        System.out.println("栈已清空");
    }

    /*获取栈的大小*/
    public int size(){
        int n = 0 ;
        Element flag = top ;
        while(flag!=base){
            flag = flag.next ;
            n++ ;
        }
        return n ;
    }

    /*遍历栈,输出栈的元素*/
    public void print(){
        if(this.isEmpty()){                        //若栈空
            System.out.println("输出失败,栈为空!");
        }else{
            Element flag = top ;
            System.out.print("栈中元素为:");
            while(flag != base){
                System.out.print(flag.data+" ");
                flag = flag.next ;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80814098