Java 中的栈和队列

本文详细介绍了Java中的栈和队列。栈遵循后进先出(LIFO)原则,可以用数组或链表实现。队列则遵循先进先出(FIFO)原则,通常使用链表实现效率更高。循环队列解决了顺序队列的假溢出问题,通过特定方式判断队列的空与满状态。
摘要由CSDN通过智能技术生成

目录

​1. 栈

​1.1 概念

1.2 栈的种类

1.3 栈的实现

2. 队列

2.1 概念

​2.2 队列实现

3. 循环队列 

3.1 为什么会有循环队列

3.2 如何区分空与满

3.3 循环队列实现


​1. 栈


​1.1 概念

栈是一种仅支持在表尾进行插入和删除操作的线性表,这一端被称为栈顶,另一端被称为栈底。元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈中的元素遵守后进先出(LIFO)的原则.

 

1.2 栈的种类

栈的底层实现有两种,基于数组的实现:顺序栈(ArrayList);基于链表的实现:链式栈(LinkedList)。 

1.3 栈的实现

// 基于数组实现链表
public class Stack<E> {
    private E[] elementData; // 栈中的元素
    private int size; // 当前栈中元素个数

    public Stack() {
        elementData = (E[]) new Object[10]; // 默认长度为10
    }

    public Stack(int initCap) {
        elementData = (E[]) new Object[initCap]; // 初始长度
    }

    // 入栈
    public void push(E value) {
        // 扩容
        if(size == elementData.length) {
            int oldLength = elementData.length;
            int newLength = oldLength << 1;
            elementData = Arrays.copyOf(elementData, newLength);
        }
        // 在数组尾部添加元素
        elementData[size++] = value;
    }

    // 出栈,返回原来的栈顶元素
    public E pop () {
        if(getSize() == 0) {
            throw new NoSuchElementException("栈中没有元素!");
        }
        // 得到原来的栈顶元素位置
        E oldVaule = elementData[size - 1];
        size--;
        elementData[size] = null;
        return oldVaule;
    }

    // 查看栈顶元素
    public E peek() {
        if(getSize() == 0) {
            throw new NoSuchElementException("栈中没有元素!");
        }
        return elementData[size - 1];
    }

    // 获取当前栈的长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值