栈
一:定义

栈(stack)是一种线性数据结构,它就像一个上图所示的放入乒乓球的圆筒容器,栈中的元素只能先入后出(First In Last Out,简称FILO)。最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶(top)。
栈这种数据结构既可以用数组来实现,也可以用链表来实现。
栈的数组实现如下:

栈的链表实现如下:

二:思考:先入后出

子弹的弹夹我们一定见过,子弹在被压入的时候就相当于是一个个元素,而弹夹就相当于是栈。
先被压入的子弹是最后被打出的,因此先压入的元素是最后出来的。
这样可以帮助我们更好地理解先入后出的含义。
注意:栈里是没有索引器的哦。
三:添加/删除栈顶元素:(push / pop)
我们把100、200、300、400先存入栈 st 中。
1:Push---入栈

2:Pop---出栈

此时输出:栈顶的元素:400
注意:原来的栈st 已经没有 400 因为他已经出栈啦
3:peek---提取

此时的栈顶元素是谁呢?是300
注意:原来的栈st 已经还有 300 因为他没有出栈,只是被提取。
4:栈转换为数组

队列
一:定义
队列也是一种特殊的线性表,它允许在一端进行插入数据,在另一端进行删除数据的。队列里边有队首,队尾,队首元素。其遵循的原则是先进先出。
二:要素
1:入队(添加):Enqueue
2:出队(删除):Dequeue
3:栈顶(不删除):Peek

试一下结果吧~
栈和队列的区别和意义
1:区别
(1)栈和队列的出入方式不同:栈是先入后出、队列是先入先出。
(2)栈和队列在具体实现的时候操作的位置不同:因为栈是先入后出,它在一段进行操作;而队列是先入先出,实现的时候在两端进行。在Java标准库中实现队列时是按照链表实现的。
2:意义
栈和队列存在的意义就是减少线性表的基本操作,提取常用操作,让人们使用起来更方便,更不容易出错。