일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- fsb
- 이진 탐색
- OOB
- ROP
- House of Orange
- DFS
- 에라토스테네스의 체
- 스택
- 이분 탐색
- heap
- 동적 계획법
- BFS
- 문자열 처리
- 스위핑 알고리즘
- 완전 탐색
- off by one
- BOF
- 수학
- tcache
- 투 포인터
- 분할 정복
- 큐
- 백트래킹
- 이진트리
- 다이나믹 프로그래밍
- 브루트 포스
- syscall
- 포맷스트링버그
- RTL
- 연결리스트
- Today
- Total
SDJ( 수돈재 아님 ㅎ )
[Python3] 스택, 큐 구현 (feat. collections.deque) 본문
이 글에서는 Python3에서 collections.deque
를 통해 스택과 큐를 구현하는 방법에 대해 서술하고자 한다.
collections.deque의 경우 '덱' 자료구조를 사용하기 위해 쓸 수도 있지만,
사실 덱 자체가 '스택'과 '큐'의 형태로 사용할 수 있기 때문에 스택이나 큐를 사용하고싶을 때 이것을 사용하면 된다.
기본적인 사용법은 다음과 같다.
>>> import collections
>>> S = collections.deque()
>>> S
deque([])
이런식으로 덱 하나를 만들어 주면 이것을 가지고 스택, 큐 처럼 사용이 가능해진다.
collections.deque()에서 제공하는 기본적인 함수는 아래와 같다
append(x)
- x를 deque 오른쪽에 추가한다.
appendleft(x)
- x를 deque 왼쪽에 추가한다.
clear()
- 덱에 있는 모든 원소를 지운다. ( 길이가 0으로 변함 )
count(x)
- 덱에 있는 원소중 x와 같은 값들이 몇개 있는지 세준다.
extendleft(iterable)
- 인자로 들어온 iterble 왼쪽부터 차례대로 appendleft()해준다
index(x[, start[, stop[[)
- 인자의 x가 [start, end) 구간 어느 위치에 있는지 확인하는 코드
- 만약 값이 없다면 ValueError가 발생한다.
insert(i, x)
- 값 x를 덱 위치중 i번째에 넣는다.
- 만약 인덱스 i가 maxlen보다 크다면 IndexError가 발생한다.
pop()
- 덱의 맨 오른쪽 원소를 반환하고 덱에서 해당 값을 제거한다.
popleft()
- 덱의 맨 왼쪽 원소를 반환하고 덱에서 해당 값을 제거한다.
remove(value)
- 덱에서 value를 찾아 해당 값을 제거해준다. 만약 발견하지 못하면 ValueError가 발생한다.
reverse()
- 덱의 원소들을 뒤집어 준다.
rotate(n=1)
- n 단계만큼 오른쪽으로 돌려준다. n이 음수일 경우에는 왼쪽으로 돌아간다.
- 덱이 비어있지 않을 때, n이 양수일 경우에는 d.appendleft(d.pop())과 같고
- n이 음수일 경우에는 d.append(d.popleft())와 같다.
maxlen
- 덱의 최대 크기를 지정해준다.
덱은 위의 함수 말고도 iteration, pickling, len(d), reversed(d), copy.copy(d), copy.deepcopy(d) 등을 사용 가능하게 해준다.
collections.deque를 이용한 STACK 구현
한번 스택을 구현해보자.
스택의 경우 FILO( First-In-Last-Out )의 구조를 가지기 떄문에
append와 pop함수를 사용해주면 된다.
>>> import collections
>>> S = collections.deque()
>>> S.append(1)
>>> S.append(2)
>>> S.append(3)
>>> print(S)
deque([1, 2, 3])
>>> S.pop()
3
>>> S.pop()
2
>>> S.pop()
1
>>> S.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop from an empty deque
>>>
collections.deque를 이용한 Queue 구현
이번에는 큐를 구현해보자.
큐의 경우에는 FIFO( Frist-In-First-Out )의 형태기 때문에 appendleft()와 pop을 해주면 된다.
>>> import collections
>>> Q = collections.deque()
>>> Q.appendleft(1)
>>> Q.appendleft(2)
>>> Q.appendleft(3)
>>> Q.pop()
1
>>> Q.pop()
2
>>> Q.pop()
3
>>> Q.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop from an empty deque
>>>
'study > 프로그래밍 언어' 카테고리의 다른 글
[Java] ArrayList 와 LinkedList (0) | 2020.07.01 |
---|