数据结构(Java实现)-栈和队列


栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。
先进后出
数据结构(Java实现)-栈和队列_第1张图片


数据结构(Java实现)-栈和队列_第2张图片


栈的使用
数据结构(Java实现)-栈和队列_第3张图片

数据结构(Java实现)-栈和队列_第4张图片


栈的模拟实现
数据结构(Java实现)-栈和队列_第5张图片

数据结构(Java实现)-栈和队列_第6张图片
上述的主要代码

public class MyStack {
    private  int[] elem;
    private int usedSize;

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

    @Override
    public String toString() {
        return "MyStack{" +
                "elem=" + Arrays.toString(elem) +
                ", usedSize=" + usedSize +
                '}';
    }

    //压栈
    public void push(int val){
        if(isFull()){
            elem=Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSize++]=val;

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

    //出栈
    public int pop(){
        if(empty()){
            throw new StackEmptyException("栈内元素为空");
        }
        return elem[--usedSize];
    }
    public  boolean empty(){
        return usedSize==0;
    }

    //获取栈顶元素
    public int peek(){
        if(empty()){
            throw new StackEmptyException("栈内元素为空");
        }
        return elem[usedSize-1];
    }

}

改变元素的序列
在这里插入图片描述

数据结构(Java实现)-栈和队列_第7张图片


在这里插入图片描述


将递归转化为循环
比如:逆序打印链表
数据结构(Java实现)-栈和队列_第8张图片
结果如下
数据结构(Java实现)-栈和队列_第9张图片


数据结构(Java实现)-栈和队列_第10张图片
数据结构(Java实现)-栈和队列_第11张图片

数据结构(Java实现)-栈和队列_第12张图片
数据结构(Java实现)-栈和队列_第13张图片
数据结构(Java实现)-栈和队列_第14张图片
数据结构(Java实现)-栈和队列_第15张图片

数据结构(Java实现)-栈和队列_第16张图片


数据结构(Java实现)-栈和队列_第17张图片

数据结构(Java实现)-栈和队列_第18张图片
数据结构(Java实现)-栈和队列_第19张图片


数据结构(Java实现)-栈和队列_第20张图片
数据结构(Java实现)-栈和队列_第21张图片

数据结构(Java实现)-栈和队列_第22张图片


数据结构(Java实现)-栈和队列_第23张图片
数据结构(Java实现)-栈和队列_第24张图片

数据结构(Java实现)-栈和队列_第25张图片


队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)
在这里插入图片描述
数据结构(Java实现)-栈和队列_第26张图片
数据结构(Java实现)-栈和队列_第27张图片


队列的使用
Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口
数据结构(Java实现)-栈和队列_第28张图片
数据结构(Java实现)-栈和队列_第29张图片


队列模拟实现(利用双向链表)
先考虑一般情况,再考虑特殊情况
数据结构(Java实现)-栈和队列_第30张图片
数据结构(Java实现)-栈和队列_第31张图片
数据结构(Java实现)-栈和队列_第32张图片
数据结构(Java实现)-栈和队列_第33张图片

数据结构(Java实现)-栈和队列_第34张图片


循环队列
环形队列通常使用数组实现
数据结构(Java实现)-栈和队列_第35张图片
数据结构(Java实现)-栈和队列_第36张图片
数据结构(Java实现)-栈和队列_第37张图片
注意事项
数据结构(Java实现)-栈和队列_第38张图片
数据结构(Java实现)-栈和队列_第39张图片
数据结构(Java实现)-栈和队列_第40张图片
数据结构(Java实现)-栈和队列_第41张图片
数据结构(Java实现)-栈和队列_第42张图片
代码如下
数据结构(Java实现)-栈和队列_第43张图片


双端队列 (Deque)
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。
栈和队列均可以使用该接口。


数据结构(Java实现)-栈和队列_第44张图片
数据结构(Java实现)-栈和队列_第45张图片
数据结构(Java实现)-栈和队列_第46张图片
数据结构(Java实现)-栈和队列_第47张图片
数据结构(Java实现)-栈和队列_第48张图片


用栈实现队列
数据结构(Java实现)-栈和队列_第49张图片
数据结构(Java实现)-栈和队列_第50张图片
数据结构(Java实现)-栈和队列_第51张图片


你可能感兴趣的:(数据结构(Java实现),数据结构,java,开发语言)