이 글에서는 이중 종료 큐의 기본 개념, 이중 종료 큐의 구현, 이중 종료 큐의 적용 등 이중 종료 큐와 관련된 문제를 주로 소개하는 python에 대한 관련 지식을 제공합니다. 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: python 튜토리얼
양단 큐는 또 다른 선형 데이터 구조입니다. 제한된 선형 테이블이지만 스택 및 큐와 달리 이중 끝형 큐에는 제한이 거의 없습니다. 기본 작업도 선형 테이블 작업의 하위 집합이지만 데이터 유형의 관점에서 볼 때 선형 테이블과 크게 다릅니다. 다른. 이 섹션에서는 이중 종단 큐의 정의와 다양한 구현을 소개하고 이중 종단 큐의 실제 적용 사례를 제공합니다.
이 섹션을 학습하면서 다음 내용을 마스터해야 합니다.
이중 종료 큐(double-end queue
, deque
)도 삽입되고 삭제 작업은 각각 시퀀스의 양쪽 끝에 있는 선형 목록으로 제한되지만 스택 및 큐와 달리 이중 종료 큐에는 제한이 거의 없습니다. 대기열의 뒤쪽(rear
) 및 대기열의 앞쪽(front
)에서는 요소 삽입과 삭제가 모두 허용됩니다. 대기열의 헤드 또는 테일에 새 요소를 추가할 수 있습니다. 마찬가지로 양쪽 끝에서 기존 요소를 제거할 수 있습니다. 어떤 의미에서 양방향 큐는 스택과 큐의 조합으로 간주될 수 있습니다. double-end queue
, deque
) 也是插入和删除操作分别被限制在序列两端的线性表,但与栈和队列不同的是,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的限制很少,对于Python 데이터 구조 및 알고리즘 학습 이중 종료 큐而言,队尾 (rear
) 和队头 (front
) 均允许插入元素和删除元素。新元素既可以被添加到队头, 也可以被添加到队尾。同理,已有的元素也能从任意一端移除。某种意义上,可以认为Python 데이터 구조 및 알고리즘 학습 이중 종료 큐是栈和队列的结合。
尽管Python 데이터 구조 및 알고리즘 학습 이중 종료 큐有栈和队列的很多特性,但是它并不要求按照这两种数据结构所限定的 LIFO
原则和 FIFO
原则操作元素。
除了添加和移除元素外,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐还具有初始化、判队空和求队长度等辅助操作。具体而言,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的抽象数据类型定义如下:
基本操作:
1. __itit__(): 初始化Python 데이터 구조 및 알고리즘 학습 이중 종료 큐
创建一个空Python 데이터 구조 및 알고리즘 학습 이중 종료 큐
2. size(): 求取并返回Python 데이터 구조 및 알고리즘 학습 이중 종료 큐中所含元素的个数 n
若Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为空,则返回整数0
3. isempty(): 判断是否为空Python 데이터 구조 및 알고리즘 학습 이중 종료 큐
判断Python 데이터 구조 및 알고리즘 학습 이중 종료 큐中是否存储元素
4. addfront(data): Python 데이터 구조 및 알고리즘 학습 이중 종료 큐队头添加元素
将元素 data 插入队头
5. addrear(data): Python 데이터 구조 및 알고리즘 학습 이중 종료 큐队尾添加元素
将元素 data 插入队尾
6. removefront(): 删除Python 데이터 구조 및 알고리즘 학습 이중 종료 큐队头元素
删除并返回队头元素
7. removerear(): 删除Python 데이터 구조 및 알고리즘 학습 이중 종료 큐队尾元素
删除并返回队尾元素
和普通队列一样,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐同样有顺序存储和链式存储两种存储表示方式。
类似于顺序队列,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的顺序存储结构利用一组地址连续的存储单元依次存放从Python 데이터 구조 및 알고리즘 학습 이중 종료 큐头到Python 데이터 구조 및 알고리즘 학습 이중 종료 큐尾的元素,同时需要用两个指针 front
和 rear
分别指示队列头元素和队列尾元素的位置。初始化空Python 데이터 구조 및 알고리즘 학습 이중 종료 큐时,front=rear=0
,当元素入队时,rear 加 1
,而元素出队时,front 加 1
,同时为了重复利用空闲空间,我们将顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐假设尾环状空间,最后一个空间和第一个空间视为连续空间(具体原因参考):
同样顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐可以是固定长度和动态长度,当Python 데이터 구조 및 알고리즘 학습 이중 종료 큐满时,定长顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐会抛出Python 데이터 구조 및 알고리즘 학습 이중 종료 큐满异常,动态顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐则会动态申请空闲空间。
顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的初始化需要 4 部分信息:deque
列表用于存储数据元素,max_size
用于存储 queue
列表的最大长度,以及 front
和 rear
LIFO
원칙과 FIFO
원칙에 따른 작동 요소가 필요하지 않습니다. 🎜🎜🎜1.2 이중 종단 큐 추상 데이터 유형🎜🎜🎜양단 큐에는 요소 추가 및 제거 외에도 초기화, 큐 비어 있음 판단 및 큐 길이와 같은 보조 작업도 있습니다. 구체적으로, 이중 종료 대기열의 추상 데이터 유형은 다음과 같이 정의됩니다. 🎜🎜 기본 작업: 🎜 ~ 1. __itit__(): deque 초기화 🎜 ~ 빈 deque 만들기 🎜 ~ 2. size(): 공용체 찾기 이중 종단 큐에 포함된 요소 수 n을 반환합니다. 이중 종단 큐가 비어 있으면 정수 0이 반환됩니다. isempty(): addfront(data)가 비어 있는지 확인합니다. : 이중 종료 큐의 헤드에 요소 추가 🎜 ~~ 큐의 맨 앞에 요소 데이터 삽입 🎜 ~ 5. addrear(data): 이중 종료 큐의 끝에 요소 추가 🎜 ~ ~~ 요소 데이터 삽입 🎜 ~ 6. Removefront(): 이중 종료 큐 제거 끝 큐의 헤드 요소 🎜 큐의 헤드 요소를 삭제하고 반환 🎜 7. Removerear(): 이중 종료 큐의 후면 요소 삭제 -종료 큐 🎜 이중 종단 큐의 뒷부분 삭제 및 반환 🎜🎜 2. 이중 종단 큐 🎜🎜 및 일반 구현 큐와 마찬가지로 이중 종단 큐에도 두 가지 저장 표현이 있습니다: 순차 저장 및 체인 스토리지. 🎜🎜🎜2.1 순차 이중 종단 큐 구현🎜🎜🎜순차 큐와 유사하게 이중 종단 큐의 순차 저장 구조는 연속 주소를 가진 저장 단위 세트를 사용하여 이중 종단 큐의 선두부터 요소를 저장합니다. 두 개의 포인터
front
및 rear
를 사용하여 큐 헤드 요소와 큐 테일 요소의 위치를 각각 나타냅니다. 빈 양면 큐 front=rear=0
를 초기화할 때, 큐에 요소가 추가되면 rear가 1씩 증가
하고, 요소가 큐에서 제거되면 , front를 1만큼 증가 /code>하고 여유 공간을 재사용하기 위해 순차 이중 끝 큐에 테일 링 공간이 있고 마지막 공간과 첫 번째 공간은 연속적인 공간으로 간주한다고 가정합니다. (특정한 이유는 을 참조하세요.): 🎜🎜🎜🎜비슷한 순차 이중 종단 큐는 고정 길이와 동적 길이가 될 수 있습니다. 이중 종단 큐가 가득 차면 고정 길이 순차 이중 종단 큐는 이중 종단 큐 전체 예외를 발생시킵니다. 동적 순차 이중 종료 큐는 여유 공간을 동적으로 적용합니다. 🎜<h4>🎜2.1.1 이중 종료 큐 초기화🎜</h4>🎜순차 이중 종료 큐의 초기화에는 4가지 정보가 필요합니다. <code>deque
목록은 데이터 요소를 저장하는 데 사용됩니다. code>max_size는 queue
목록의 최대 길이를 저장하는 데 사용되며 front
및 rear
는 인덱스를 기록하는 데 사용됩니다. 머리 요소와 꼬리 요소 각각 :🎜class Deque: def __init__(self, max_size=6): self.max_size = max_size self.deque = [None] * self.max_size self.front = 0 self.rear = 0
front
와 rear
는 head 요소와 tail 요소의 인덱스를 기록하는 데 사용되기 때문입니다 각각, 우리는 이중 종단 큐의 길이를 동시에 편리하게 계산할 수 있습니다. 우리는 이중 종단 큐가 순환 큐이고 front
가 보다 클 수 있다는 점을 고려해야 합니다. Rear
이며 rear-front
code>를 통해 직접 전달할 수 없으므로 이 문제를 해결하려면 수식 계산을 사용해야 합니다.front
和 rear
分别用于记录队头元素和队尾元素的索引,因此我们可以方便的计算出Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的长度;同时我们需要考虑Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为Python 데이터 구조 및 알고리즘 학습 이중 종료 큐,front
可能大于 rear
,不能直接通过 rear-front
,我们需要利用公式计算解决此问题:
Python
实现如下:
def size(self): return (self.rear-self.front+self.max_size) % self.max_size
根据 front
和 rear
的值可以方便的判断Python 데이터 구조 및 알고리즘 학습 이중 종료 큐是否为空:
def isempty(self): return self.rear==self.front
根据 front
和 rear
的值可以方便的判断Python 데이터 구조 및 알고리즘 학습 이중 종료 큐是否还有空余空间:
def isfull(self): return ((self.rear+1) % self.max_size == self.front)
添加元素时,需要首先判断Python 데이터 구조 및 알고리즘 학습 이중 종료 큐中是否还有空闲空间,然后根据Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为定长顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐或动态顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐,添加元素操作稍有不同:
[定长顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的添加元素操作] 如果队满,则引发异常:
# 注意队头和队尾修改索引的添加元素的不同顺序 def addrear(self, data): if not self.isfull(): self.deque[self.rear] = data self.rear = (self.rear+1) % self.max_size else: raise IndexError("Full Deque Exception") def addfront(self, data): if self.isfull(): self.resize() if self.isempty(): # 当Python 데이터 구조 및 알고리즘 학습 이중 종료 큐 self.deque[self.rear] = data self.rear = (self.rear+1) % self.max_size else: self.front = (self.front - 1 + self.max_size) % self.max_size self.deque[self.front] = data
[动态顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的添加元素操作] 如果Python 데이터 구조 및 알고리즘 학습 이중 종료 큐满,则首先申请新空间,然后再执行添加操作:
def resize(self): new_size = 2 * self.max_size new_deque = [None] * new_size d = new_size - self.max_size for i in range(self.max_size): new_deque[(self.front+i+d) % new_size] = self.deque[(self.front+i) % self.max_size] self.deque = new_deque self.front = (self.front+d) % new_size self.max_size = new_size # 注意队头和队尾修改索引的添加元素的不同顺序 def addrear(self, data): if self.isfull(): self.resize() self.deque[self.rear] = data self.rear = (self.rear+1) % self.max_size def addfront(self, data): if self.isfull(): self.resize() self.front = (self.front - 1 + self.max_size) % self.max_size self.deque[self.front] = data
与动态顺序队列类似,我们同样需要考虑复制之后的索引,否则可能出现存在不能用的空闲空间:
添加元素的时间复杂度为O(1)。虽然当动态顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐满时,原Python 데이터 구조 및 알고리즘 학습 이중 종료 큐中的元素需要首先复制到新Python 데이터 구조 및 알고리즘 학습 이중 종료 큐中,然后添加新元素,但参考《顺序表及其操作实现》中顺序表追加操作的介绍,由于 n
次添加元素操作的总时间T(n) 与O(n) 成正比,因此其摊销时间复杂度可以认为O(1)。
若Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不空,则删除并返回指定端元素:
# 注意队头和队尾修改索引的删除元素的不同顺序 def removefront(self): if not self.isempty(): result = self.deque[self.front] self.front = (self.front+1) % self.max_size return result else: raise IndexError("Empty Deque Exception") def removerear(self): if not self.isempty(): self.rear = (self.rear - 1 + self.max_size) % self.max_size result = self.deque[self.rear] return result else: raise IndexError("Empty Deque Exception")
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的另一种存储表示方式是使用链式存储结构,因此也常称为链Python 데이터 구조 및 알고리즘 학습 이중 종료 큐,其中 addfront
操作和 addrear
操作分别是通过在链表头部和尾部插入元素来实现的,而 removefront
操作和 removerear
操作分别是通过从头部和尾部删除结点来实现的。为了降低在尾部删除结点的时间复杂度,接下来基于双向链表实现Python 데이터 구조 및 알고리즘 학습 이중 종료 큐。
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的结点实现与双向链表并无差别:
class Node: def __init__(self, data=None): self.data = data self.next = None def __str__(self): return str(self.data)
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的初始化函数中,使其队头指针 front
和队尾指针 rear
均指向 None
,并初始化Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度:
class Deque: def __init__(self): self.front = None self.rear = None self.num = 0
返回 num
的值用于求取Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的长度,如果没有 num
属性,则需要遍历整个链表才能得到Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度:
def size(self): return self.num
根据Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的长度可以很容易的判断其是否为空Python 데이터 구조 및 알고리즘 학습 이중 종료 큐:
def isempty(self): return self.num <h4>2.2.5 添加元素</h4><p>Python 데이터 구조 및 알고리즘 학습 이중 종료 큐添加元素时,可以在队尾或队头插入新元素,因此需要修改 <code>rear</code> 和 <code>front</code> 指针,并且同时也要修改结点的 <code>next</code> 和 <code>previous</code></p><code>Python</code>은 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> def addrear(self, data): node = Node(data) # 如果添加元素前Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为空,则添加结点时,需要将front指针也指向该结点 if self.front is None: self.rear = node self.front = node else: node.previous = self.rear self.rear.next = node self.rear = node self.num += 1 def addfront(self, data): node = Node(data) # 如果添加元素前Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为空,则添加结点时,需要将rear指针也指向该结点 if self.rear is None: self.front = node self.rear = node else: node.next = self.front self.front.previous = node self.front = node self.num += 1
front 및 <code>rear
의 값을 쉽게 확인할 수 있습니다. 이중 종료 큐가 비어 있는지 여부: 🎜def removefront(self): if self.isempty(): raise IndexError("Empty Queue Exception") result = self.front.data self.front = self.front.next self.num -= 1 if self.isempty(): self.rear = self.front else: # 若删除操作完成后,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不为空,将 front 指针的前驱指针指向 None self.front.previous = None return result def removerear(self): if self.isempty(): raise IndexError("Empty Queue Exception") result = self.rear.data self.rear = self.rear.previous self.num -= 1 if self.isempty(): self.front = self.rear else: # 若删除操作完成后,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不为空,将 rear 指针的后继指针指向 None self.rear.next = None return result
front
및 rear
값에 따라 이중 종료 큐가 가득 찼는지 확인🎜🎜🎜 이중 종료 큐에 여유 공간이 있는지 쉽게 확인할 수 있습니다: 🎜# 初始化一个最大长度为5的Python 데이터 구조 및 알고리즘 학습 이중 종료 큐dq = Deque(5)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空?', dq.isempty())for i in range(3): print('队头添加元素:', 2*i) dq.addfront(2*i) print('队尾添加元素:', 2*i+1) dq.addrear(2*i+1)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())for i in range(3): print('队尾删除元素:', dq.removerear()) print('队头删除元素:', dq.removefront())print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空? True队头添加元素: 0队尾添加元素: 1队头添加元素: 2队尾添加元素: 3队头添加元素: 4队尾添加元素: 5Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 6队尾删除元素: 5队头删除元素: 4队尾删除元素: 3队头删除元素: 2队尾删除元素: 1队头删除元素: 0Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 0
# 初始化新队列dq = Deque()print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空?', dq.isempty())for i in range(3): print('队头添加元素:', i) dq.addfront(2*i) print('队尾添加元素:', i+3) dq.addrear(2*i+1)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())for i in range(3): print('队尾删除元素:', dq.removerear()) print('队头删除元素:', dq.removefront())print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())
n
요소 추가 작업의 총 시간으로 인해T ( n) 및 O(n) /span>은 ">O의 상각 시간 복잡도에 비례합니다. span>(1)스팬>. 🎜🎜🎜2.1.6 대기열의 머리 또는 꼬리에 있는 요소를 삭제합니다🎜🎜🎜이중 종료 대기열이 비어 있지 않으면 삭제하고 지정된 끝 요소를 반환합니다. 🎜Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空? True队头添加元素: 0队尾添加元素: 3队头添加元素: 1队尾添加元素: 4队头添加元素: 2队尾添加元素: 5Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 6队尾删除元素: 5队头删除元素: 4队尾删除元素: 3队头删除元素: 2队尾删除元素: 1队头删除元素: 0Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 0
addfront
작업과 addrear
작업은 각각 연결 목록의 머리 부분과 끝 부분에 요소를 삽입하여 수행되며, removefront
및 removerear
작업은 구현됩니다. 머리와 꼬리에서 각각 노드를 삭제합니다. tail에서 노드를 삭제하는 시간 복잡도를 줄이기 위해 이중 연결 목록을 기반으로 이중 종료 큐를 구현합니다. 🎜🎜🎜🎜2.2.1 더블 종료 대기열 노드 🎜🎜이중 종료 대기열의 노드 구현은 이중 연결 목록의 노드 구현과 다르지 않습니다. 🎜def ispalindrome(string): deque = Deque() for ch in string: deque.addfront(ch) flag = True while deque.size() > 1 and flag: ch1 = deque.removefront() ch2 = deque.removerear() if ch1 != ch2: flag = False return flag
front
와 큐 꼬리 포인터 rear
는 모두 None
을 가리키도록 설정하고 양방향 큐의 길이를 초기화합니다. 🎜print('abcba是否为回文序列:', ispalindrome('abcba'))print('charaahc是否为回文序列:', ispalindrome('charaahc'))
num
값은 이중 종료 큐의 길이를 찾는 데 사용됩니다. 속성, 이중 종료 큐의 길이를 얻으려면 전체 연결 목록을 순회해야 합니다. 🎜abcba是否为回文序列: True charaahc是否为回文序列: False
후면
및 전면
포인터를 수정해야 하며 노드의 다음
및 이전
포인터도 동시에 수정해야 합니다. 시간; 요소를 추가하기 전에 이중 종료 대기열이 비어 있으면 그에 따라 처리해야 합니다. 🎜def addrear(self, data): node = Node(data) # 如果添加元素前Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为空,则添加结点时,需要将front指针也指向该结点 if self.front is None: self.rear = node self.front = node else: node.previous = self.rear self.rear.next = node self.rear = node self.num += 1 def addfront(self, data): node = Node(data) # 如果添加元素前Python 데이터 구조 및 알고리즘 학습 이중 종료 큐为空,则添加结点时,需要将rear指针也指向该结点 if self.rear is None: self.front = node self.rear = node else: node.next = self.front self.front.previous = node self.front = node self.num += 1
若Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不空,可以从删除队头或队尾元素并返回,删除操作需要更新队头指针 front
以及尾指针 rear
,同时也要修改结点的 next
和 previous
指针,若出队元素尾队中最后一个结点,还需要进行相应处理:
def removefront(self): if self.isempty(): raise IndexError("Empty Queue Exception") result = self.front.data self.front = self.front.next self.num -= 1 if self.isempty(): self.rear = self.front else: # 若删除操作完成后,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不为空,将 front 指针的前驱指针指向 None self.front.previous = None return result def removerear(self): if self.isempty(): raise IndexError("Empty Queue Exception") result = self.rear.data self.rear = self.rear.previous self.num -= 1 if self.isempty(): self.front = self.rear else: # 若删除操作完成后,Python 데이터 구조 및 알고리즘 학습 이중 종료 큐不为空,将 rear 指针的后继指针指向 None self.rear.next = None return result
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐的不同实现对比与栈的不同实现类似,可以参考《栈及其操作实现》。
接下来,我们首先测试上述实现的Python 데이터 구조 및 알고리즘 학습 이중 종료 큐,以验证操作的有效性,然后利用实现的基本操作来解决实际算法问题。
首先初始化一个顺序Python 데이터 구조 및 알고리즘 학습 이중 종료 큐 deque
,然后测试相关操作:
# 初始化一个最大长度为5的Python 데이터 구조 및 알고리즘 학습 이중 종료 큐dq = Deque(5)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空?', dq.isempty())for i in range(3): print('队头添加元素:', 2*i) dq.addfront(2*i) print('队尾添加元素:', 2*i+1) dq.addrear(2*i+1)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())for i in range(3): print('队尾删除元素:', dq.removerear()) print('队头删除元素:', dq.removefront())print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())
测试程序输出结果如下:
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空? True队头添加元素: 0队尾添加元素: 1队头添加元素: 2队尾添加元素: 3队头添加元素: 4队尾添加元素: 5Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 6队尾删除元素: 5队头删除元素: 4队尾删除元素: 3队头删除元素: 2队尾删除元素: 1队头删除元素: 0Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 0
首先初始化一个链Python 데이터 구조 및 알고리즘 학습 이중 종료 큐 queue
,然后测试相关操作:
# 初始化新队列dq = Deque()print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空?', dq.isempty())for i in range(3): print('队头添加元素:', i) dq.addfront(2*i) print('队尾添加元素:', i+3) dq.addrear(2*i+1)print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())for i in range(3): print('队尾删除元素:', dq.removerear()) print('队头删除元素:', dq.removefront())print('Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为:', dq.size())
测试程序输出结果如下:
Python 데이터 구조 및 알고리즘 학습 이중 종료 큐空? True队头添加元素: 0队尾添加元素: 3队头添加元素: 1队尾添加元素: 4队头添加元素: 2队尾添加元素: 5Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 6队尾删除元素: 5队头删除元素: 4队尾删除元素: 3队头删除元素: 2队尾删除元素: 1队头删除元素: 0Python 데이터 구조 및 알고리즘 학습 이중 종료 큐长度为: 0
[1] 给定一字符串 string
(如:abamaba),检查其是否为回文。
使用Python 데이터 구조 및 알고리즘 학습 이중 종료 큐可以快速检查一字符串是否为回文序列,只需要将字符串中字符依次入队,然后从Python 데이터 구조 및 알고리즘 학습 이중 종료 큐两端依次弹出元素,对比它们是否相等:
def ispalindrome(string): deque = Deque() for ch in string: deque.addfront(ch) flag = True while deque.size() > 1 and flag: ch1 = deque.removefront() ch2 = deque.removerear() if ch1 != ch2: flag = False return flag
验证算法有效性:
print('abcba是否为回文序列:', ispalindrome('abcba'))print('charaahc是否为回文序列:', ispalindrome('charaahc'))
结果输出如下:
abcba是否为回文序列: True charaahc是否为回文序列: False
推荐学习:python教程
위 내용은 Python 데이터 구조 및 알고리즘 학습 이중 종료 큐의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!