deque的简单使用

本文介绍了Python中deque数据结构的特性和使用方法,包括其作为栈和双向队列的功能,以及与list相比的优势,如appendleft等独特方法。通过实例演示了deque的初始化、元素添加及最大长度限制。

1、deque可以用作栈,也可用作双向队列

2、list能用的方法,deque全都能用,deque还有一些list没有的方法

 

from collections import deque

a = deque()
print(a)
a = deque([1,2,3,4,5])
print(a)
a.append(6)
print(a)
a = deque([1,2,3,4,5], maxlen=5) #设定了最大长度5,当添加元素的时候,会把前面的元素去掉
a.append(6)
print(a)
a = deque([1,2,3,4,5], maxlen=5)
a.appendleft(6)  #这是list没有的方法,appendleft,从左端添加元素
print(a)

打印结果:
deque([])
deque([1, 2, 3, 4, 5])
deque([1, 2, 3, 4, 5, 6])
deque([2, 3, 4, 5, 6], maxlen=5)
deque([6, 1, 2, 3, 4], maxlen=5)

 

### 使用方法 Deque 是双端队列,两端都可以进行元素的进出操作,提供了抛异常和返回值两种不同的操作方式,具体如下: - **添加元素**:可以在队列的头部或尾部添加元素,抛异常的方法为 `addFirst(e)` 和 `addLast(e)`,返回值的方法为 `offerFirst(e)` 和 `offerLast(e)` [^1]。 - **删除元素**:可以删除队列的头部或尾部元素,抛异常的方法为 `removeFirst()` 和 `removeLast()`,返回值的方法为 `pollFirst()` 和 `pollLast()` [^1]。 - **查看元素**:可以查看队列的头部或尾部元素,抛异常的方法为 `getFirst()` 和 `getLast()`,返回值的方法为 `peekFirst()` 和 `peekLast()` [^1]。 以下是一个简单Deque 使用示例: ```java import java.util.Deque; import java.util.LinkedList; public class DequeExample { public static void main(String[] args) { Deque<Integer> deque = new LinkedList<>(); deque.offerLast(10); deque.offerLast(15); deque.offerLast(20); deque.offerFirst(5); System.out.println("弹出队首元素" + deque.pollFirst()); System.out.println("弹出队尾元素" + deque.pollLast()); System.out.println("查看此时队尾元素" + deque.peekLast()); System.out.println("判断队列是否为空" + deque.isEmpty()); } } ``` ### 特点 Deque 有多种实现类,常见的有 `ArrayDeque` 和 `LinkedList`,它们具有不同的特点: - **`ArrayDeque`**:基于数组实现的线性双向队列,在处理大量数据时,由于数组的连续存储特性,其内存占用相对较低,并且在多数情况下性能表现较好 [^2]。 - **`LinkedList`**:基于链表实现的链式双向队列,其底层结构是双向链表。与 `ArrayList` 相比,随机访问速度慢(时间复杂度为 O(n)),但头尾插入/删除速度快(时间复杂度为 O(1)),中间插入/删除速度平均为 O(n),内存占用较高(需要存储指针) [^3]。 ### 应用场景 - **栈和队列的实现**:由于 Deque 支持从两端进行元素的添加和删除操作,因此可以方便地实现栈(后进先出)和队列(先进先出)的功能。 - **LRU 缓存淘汰算法**:可以使用 `LinkedList` 来实现 LRU(Least Recently Used)缓存淘汰算法,利用其链表结构方便地移动元素,将最近使用的元素移到链表头部,当缓存满时,淘汰链表尾部的元素 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值