[Java 数据结构] 栈(stack)和 队列(queue)

目录

栈(Stack)

队列(Queue)

一、 队列中的一些操作:

二、队列的容量问题

三、JDK 中提供的栈和队列

四、栈和队列的使用场景

五、自己实现栈和队列


栈(Stack)

一种严格按照先进后出(First In Last Out)FILO、后进先出(Last In First Out ) LIFO模式的一种容器结构


Stack、FILO、LIFO都指的是一个东西。

bottom:最底层的元素         top:最上面的元素         push:压栈          pop:弹出          peek:查看但不取出栈顶元素

队列(Queue)

严格遵守先进先出(First In First Out) FIFO 的一种容器结构。最常见实现还是通过线性结构实现


 offer(放入队列):隐含着放入队尾        poll(取出元素):隐含从队首取出元素        peek(查看但不删除队首元素)

假如用线性表实现:队首并不要求一定是线性表的开始,同理,队尾也并不要求必须是线性表的结尾。

1、2 的操作  或者  3、4的操作:栈       

1、4的操作   或者  3、2的操作: 队列 

一、 队列中的一些操作:

bollean offer(E e)  把元素放入队列(放入队尾)   失败:return false;  时间复杂度:O(1)

E poll( )   取出队首元素(同时从队列中删除该元素)   失败:return null;  时间复杂度:O(1)        使用之前先使用 isEmpty() 或者 size() 判断之后,就不会遇到失败的情况(队列为empty)

E peek( )  查看队首元素(不从队列中删除)                 失败:return null; 时间复杂的:O(1)        使用在 isEmpty() 或者 size() 判断之后

二、队列的容量问题

队列并没有要求过是否有容量上限,所以具体实现时,可以有容量上限也可以没有

比如:如果 LinkedList 实现的队列没有容量上限。但用 ArrayDeque 实现的队列,是有容量上限的。如果容量上限,则达到容量上限时,插入失败,以 return false 来体现。

三、JDK 中提供的栈和队列

栈:

Deque<String> stack = new LinkedList();

stack.isEmpty();        stack.size();        stack.push(e);        e = stack.pop();        e = stack.peek();

队列:

Queue<String> queue = new LinkedList();

queue.isEmpty();     queue.size();     queue.offer(e);     e = queue.poll();       e = queue.peek();

四、栈和队列的使用场景

栈:需要方向序列时,可以想到栈   1、2、3、4 -> 4、3、2、1

       需要回溯的时候,可以想到栈    家 -> 学校 -> 商场  -> 饭店

                                                          饭店 -> 商场 -> 学校 -> 家

       需要深度优先遍历时候,可以想到栈

队列:需要公平性、需要广度优先遍历时候,可以想到队列

五、自己实现栈和队列

栈:可以用顺序表(优先),也可以用链表实现

顺序表:尾删和尾插的时间复杂度都是O(1)

链表:如果是双向链表,头尾都可以;如果是单向链表,头删、尾插(多维护一个尾结点即可)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值