用Java描述数据结构之栈和队列,以及栈和队列的常用方法

一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然。它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具体加了哪些限制,且听我娓娓道来。

在这里插入图片描述

这是一个线性表,我们可以对这个这个线性表内的任何一个元素进行需要的操作,我可以删掉既不是头也不是尾的[ 2 ]号元素,也可以在 [ 1 ]号位插入新的元素,就是说你对这个线性表里面的任何一个元素操作都是可以的,现在你把它放依次放到一个杯子里面。
在这里插入图片描述
可以看到最先进去的[ 0 ]号在杯子的最下面,最后进去的[ 3 ]号在杯子的最上面,当你想取[ 0 ]号的时候你先得依次取出[ 3 ], [ 2 ], [ 1 ],因为这个杯子就只有一个口,这个口在最上面。
而我们的栈就是对线性表人为的进行了类似杯子的这种限制,满足这个线性表只能在一端操作,即第一个进去的最后一个出来,最后一个进去的第一个出来——FILO(First In Last Out)或者 最后一个进去的第一个出来,第一个进去的最后一个出来——LIFO(Last In Fast Out),也就是只能对栈顶元素操作。
看起来是对原来线性表的尾插和尾删,在栈中有了新的名词分别叫做压栈(push)和出栈/弹出(pop)
在这里插入图片描述

在这里插入图片描述
在Java常用的有两种方式实现一个栈

第一种:

Stack<> stack = new Stack<>();

第二种:

Deque<> stack = new LinkedList<>();

都有常用的三个方法

push():压栈。
peek():查看栈顶元素(就是放入杯子中线性表的最后一个元素)。
pop():删除栈顶元素,并且返回被删除元素的值。

下面通过代码来看:

第一种:

import java.util.Stack;

public class Demo {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        
        stack.push("我");
        stack.push("爱");
        stack.push("中");
        stack.push("国");

        System.out.println(stack);

        System.out.println(stack.empty());
        System.out.println(stack.isEmpty());
        System.out.println(stack.peek());
        System.out.println(stack.pop());
        System.out.println(stack);
       
    }
}

运行结果:
在这里插入图片描述

第二种:

import java.util.Deque;
import java.util.LinkedList;

public class Demo {
    public static void main(String[] args) {
        Deque<String> stack = new LinkedList<>();
        stack.push("我");
        stack.push("爱");
        stack.push("中");
        stack.push("国");
        System.out.println(stack);
        System.out.println(stack.peek());
        System.out.println(stack.pop());
        System.out.println(stack);
        System.out.println(stack.isEmpty());
    }
}

运行结果:
在这里插入图片描述
需要注意的是第一种栈压栈时实际是线性表的尾插,第二种栈压栈时是线性表的头插,所以才会会看到在打印时,第一种是“我爱中国”,第二种是“国中爱我”。


队列

在这里插入图片描述

还是那个线性表,只不过这次不是装到杯子里而是将它塞入一根管子
在这里插入图片描述

所以这次对线性表的限制是新的元素只能从队尾插入,想操作的话也只能操作位于队首的元素。
在Java中通常这么实现一个队列

 Queue<> queue = new LinkedList<>();

它的常用方法:

add():插入一个元素。
remove():删除队首元素,并且返回该元素的值。
element():查看队首元素。

下面通过代码来看:

import java.util.LinkedList;
import java.util.Queue;

public class Demo {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
		
		queue.add("a");
        queue.add("b");
        queue.add("c");
        System.out.println(queue);
        System.out.println(queue.peek());
        System.out.println(queue.element());
        System.out.println(queue.remove());
        System.out.println(queue);
    }
}

运行结果:

在这里插入图片描述
以上就是对栈和队列的简单介绍,如果理解有偏差还请各位看官在评论区指正,谢谢。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有裂痕的石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值