java栈的代码实现及理解


什么是java栈?

刚开始我也不知道什么是java栈,只知道栈是LIFO(后进先出),队列是FIFO(先进先出),其实栈就是java的一种数据结构,用java的基础数据类型构造的一种数据结构。

而栈的底层是通过数组实现的。没啥了不起,它就是一个java类,这个类里面写了一些入栈,出栈的方法,而底层是用了数组来存放数据而已。来看看代码就明白了

 

package com.ch.interfacemanager.test;

public class SqStack {
         
        private Object[] stackElem;//数组就是栈的本质 private int top;        //top栈顶,其实就是一个数组下标 public SqStack(int maxSize)
        {
            stackElem=new Object[maxSize];
            top=0;
        }
     
        //清空
        public void clear()
        {
            top=0;
        }
        //是否为空
        public boolean isEmpty()
        {
            return top==0;
        }
        //元素个数(也就是栈的大小)
        public int length()
        {
            return top;
        }
        //栈顶
        public Object peek()
        {
            if(!isEmpty())
                return stackElem[top-1];
            else
                return null;
        }
     
        //入栈
        public void push(Object x) throws Exception
        {
            if(top==stackElem.length)
            {
                throw new Exception("栈已满!");
            }
            else
            {
                stackElem[top++]=x;
            }
        }
        //出栈
        public Object pop() throws Exception
        {
            if(top==0)
            {
                throw new Exception("栈为空!");
            }
            else
                return stackElem[--top];  //删除然后返回现在的栈顶
        }
     
        //打印(从栈顶到栈底)
        public void display()
        {
            for(int i=length()-1; i>=0; i--)
            {
                System.out.print(stackElem[i]+" ");
            }
            System.out.println();
        }
        
        //jiancha
        public void showArry(){
            System.out.println("数组长度: "+stackElem.length);
            System.out.print("全部元素: ");
            for(int i=stackElem.length-1; i>=0; i--)
            {
                System.out.print(stackElem[i]+" ");
            }
            System.out.println();
        }
     
        public static void main(String[] args) throws Exception
        {
            SqStack sqStack=new SqStack(6);
            sqStack.push(3);
            sqStack.push(6);
            sqStack.push(9);
         sqStack.push(1);

System.
out.print("打印输出: "); sqStack.display(); int top=(int)sqStack.peek(); System.out.println("栈顶: "+top); sqStack.pop(); System.out.print("弹出栈顶,打印输出: "); sqStack.display(); System.out.println("数组实际情况: "); sqStack.showArry(); } }

 

输出:

打印输出: 1 9 6 3
栈顶: 1
弹出栈顶,打印输出: 9 6 3
数组实际情况:
数组长度: 6
全部元素: null null 1 9 6 3

事实证明:

1.数组的长度初始化后是不变的。

2.栈是通过top记录下标的方式来控制栈的大小。

3.一旦元素入栈数据就一直存在数组当中,出栈操作仅仅是改变top下标值从而达到控制栈的大小实际元素并没有从数组中删除掉

 

 

 

1.栈
    栈相对于开放的数组而言,是访问受限的
    栈只允许访问一个数据项,即最后插入的数据项,移除这个数据项后才能访问倒数第二个数据项
    栈的特点:先进后出


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM