2016-07-31 4 views
2

Python에서 큐와 스택을 다시 만들려고 할 때 아래 코드 스 니펫에서 deque가 어떻게 작동하는지 이해하는 데 어려움이 있습니다.Deque가 Python에서 작동하는 방법

스택 예는 - 밀고 터지는 때 "전자는"최근에, 첫 번째 출력 (LIFO)을 간다 예상대로

stack = ["a", "b", "c"] 

# push operation 
stack.append("e") 
print(stack) 

# pop operation 
stack.pop() 
print(stack) 

이해했다. 내 질문은 아래 예제와 같습니다.

큐 예 - 밀고 터지는 경우

from collections import deque 

dq = deque(['a','b','c']) 
print(dq) 

# push 
dq.append('e') 
print(dq) 

# pop 
dq.pop() 
print(dq) 

을 이해하지는 "전자는"최근에, 첫 번째 출력 (LIFO)을 간다. 선입 선출 (FIFO)이되어서는 안됩니까?

+2

[deque'] (https://docs.python.org/3/library/collections.html) 문서를 확인하십시오. ['dq.popleft()'] (https://docs.python.org/3/library/collections.html#collections.deque.popleft) (또는'.appendleft()')를 찾을 수도 있습니다. 두 경우 모두 dequeue의 "de"는 "double-ended"를 나타냅니다. – jedwards

+0

왜 다른가? – zondo

답변

5

A deque is a generalization of stack and a queue (It is short for "double-ended queue").

따라서 pop() 연산은 여전히리스트처럼 스택처럼 동작합니다. 큐처럼 작동하게하려면 popleft() 명령을 사용하십시오. 이 동작은 popure() 함수가 데이터 구조 전반에 걸쳐 일관성을 유지하도록합니다. deque를 대기열처럼 작동 시키려면 대기열에 해당하는 함수를 사용해야합니다. 따라서 두 번째 예제에서 pop()을 popleft()로 바꾸면 예상 한 FIFO 동작이 나타나야합니다.

Deques는 최대 길이를 지원하기 때문에 최대 길이보다 큰 객체를 양각 큐에 추가하면 최대 크기를 유지하기 위해 반대쪽 끝에서 여러 객체를 "떨어 뜨립니다".

관련 문제