栈【Java】

36 篇文章 0 订阅
12 篇文章 2 订阅

什么是栈

栈是一种只能在表尾进行插入和删除操作的线性表;
栈顶和栈底:进行数据的插入和删除操作的一端称为栈顶,另外一端为栈底;
压栈 :插入元素的操作称为压栈或入栈;
出栈:对栈中元素的删除操作;
空栈:不含任何数据的栈为空栈;

栈的特性:先进的后出

栈的模拟实现

import java.util.Arrays;

public class MyStack {
    //栈的底层依然是一个数组;
    public int elem[];
    //记录栈中元素的个数;
    public int UsedSize=0;

    public  MyStack(){
        this.elem=new int [10];
    }

    //入栈

    public int push(int key){

        //如果栈满,进行扩容
        if(isFull()){
            elem= Arrays.copyOf(elem,2*UsedSize);
        }


        return elem[UsedSize++]=key;
    }
//出栈
    public int pop(){
        if (empty()){
            System.out.println("栈为空!");
            return -1;
        }

        int ret=elem[UsedSize-1];
        UsedSize--;
        return ret;
    }

    //查看栈顶元素
    public int peek(){
        if (empty()){
            System.out.println("栈为空!");
            return -1;
        }
        return elem[UsedSize-1];
    }

    //判断当前栈是否为空
    public boolean empty(){
        //当前栈中元素个数为0,空栈
        return UsedSize==0;
    }

    //栈的长度

    public int getUsedSize(){
        return UsedSize;
    }

    public boolean isFull(){
        return UsedSize  == elem.length;
    }

}

栈的基本方法

import java.util.Stack;

public class Test2 {

    public static void main(String[] args) {

        //构造一个空栈;
        Stack<Integer> stack=new Stack<>();

        //元素入栈
        stack.push(32);
        stack.push(47);
        stack.push(30);
        stack.push(78);
        stack.push(91);
        stack.push(31);

        //栈顶元素出栈
        Integer t=stack.pop();
        System.out.println(t);      // 31

        //查看当前栈顶元素,不出栈
        Integer t1=stack.peek();
        System.out.println(t1);     //91

        //获取当前栈中元素个数
        int m=stack.size();
        System.out.println(m);      // 5

        //判断当前栈是否为空,为空返回true
        boolean b=stack.empty();
        System.out.println(b);      // false
    }
}

关于栈,java中有许多栈:

  • Stack:栈,一种数据结构,具有先进的后出的特性;
  • java虚拟机栈:描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。
  • “栈帧”:则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素。

over!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值