【数据结构】栈的实现Java

文章介绍了栈的基本概念,包括它的线性表特性、LIFO原则以及压栈和出栈操作。栈的Java模拟实现使用了Vector类作为基础,同时提供了自定义的Stack类。此外,文章提出了关于栈、虚拟机栈和栈帧区别的思考问题。
摘要由CSDN通过智能技术生成

目录

1. 概念

2.栈的使用

3.栈的模拟实现

4.思考题


1. 概念

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈,出数据在栈顶。

2.栈的使用

方法功能
Stack()构入栈造一个空的栈
E push( E e)将e入栈,并返回e
E pop()将栈顶元素出栈并返回
E peek()获取栈顶元素
int size()获取栈中有效元素个数
boolean empty()检测栈是否为空

3.栈的模拟实现

从上图中可以看到,Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的。

import java.util.Arrays;
import java.util.NoSuchElementException;

public class MyStack <E>{

    //保存元素的数组
    private Object data[];
    //实际元素的个数
    private int size;

    //初始化数组
    public MyStack() {
        this.data = new Object[10];
    }

    public MyStack(int size) {
        this.data = new Object[size];
    }

    //入栈
    public void push(E element){
        data[size++] = element;
        //栈满需要扩充
        if(size == data.length){
            isFull();
        }
    }

    private void isFull(){
        this.data = Arrays.copyOf(data,data.length<<1);
    }

    //出栈
    public E pop(){
        if(empty()){
            throw new NoSuchElementException("没有元素~");
        }
        E val = (E)data[size-1];
        size--;
        return val;
    }

    //获取栈顶元素
    public E peek(){
        if(empty()){
            throw new NoSuchElementException("没有元素~");
        }
        return (E)data[size-1];
    }

    //获取栈中有效元素个数
    public int size(){
        return size;
    }

    //检测栈是否为空
    public boolean empty(){
        return size == 0;
    }


}

4.思考题

 栈、虚拟机栈、栈帧有什么区别呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值