栈的原理和使用

栈:后入先出的数据结构

栈是java的一种数据结构,栈的底层是通过数组实现的。
它本身是一个java类,这个类里面写了一些入栈,出栈的方法。

在这里插入图片描述
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();
        }

栈的一些特点:
1.数组的长度初始化后是不变的。
2.栈是通过top记录下标的方式来控制栈的大小。
3.一旦元素入栈数据就一直存在数组当中,出栈操作仅仅是改变top下标值从而达到控制栈的大小,实际元素并没有从数组中删除掉。
栈的基本使用:

Stack stack=new Stack//初始化
stack.empty()//判断是否为空
stack.peek()//取栈顶值(不出栈)
stack.push(Object);//进栈
stack.pop();//出栈
简单实例:
public class Test {
    public static void main(String[] args) {
        Stack stack=new Stack();
        //1.empty()栈是否为空
        System.out.println(stack.empty());
        //2.进栈push()
        stack.push(new Integer(1));
        stack.push("b");
        //3.peek()栈顶值
        System.out.println(stack.peek());
        //4.pop()出栈
        stack.pop();
        System.out.println(stack.peek());
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值