일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 빅데이터
- 부트캠프
- 노마드코더
- 2021
- python
- 매일매일
- 재미져
- 코딩테스트
- 열심히
- 성실히
- Ai
- Codestates
- JavaScript
- SQL
- selenium
- MYSQL
- 기초통계
- 딥러닝
- 주간보고
- 독서
- pandas
- yolo
- bootcamp
- leetcode
- 자료구조
- 파이썬
- 코드스테이츠
- 꾸준히
- 리뷰
- 선형회귀
- Today
- Total
코딩일기
[자료구조] 4. 추상형 자료형 큐(queue) 이해하기(feat. codestates, self tutorial) 본문
안녕하십니까 다제입니다.
오늘은 큐에 대해서 알아보도록 하겠습니다.
1. 큐(Queue) 정의
큐(Queue) : 데이터간 순서를 약속하는 추상자료형 입니다.
데이터를 앞에서만 삭제하고 뒤에서만 삽입하는 것을 FIFO(First-in-First-out)이라고 합니다.
2. 큐(Queue) 기능
-. 데이터간 순서 관계를 유지할 수 있어야한다.
-. 맨 뒤 데이터를 삽입 할 수 있어야 한다.
-. 맨 앞 데이터를 삭제 할 수 있어야 한다.
-. 맨 앞 데이터에 접근 할 수 있어야 한다.
위에서 언급한 기능들에 대해서 코드로 직접 보도록 하겠습니다.
사실 파이썬에서는 큐(Queue)를 라이브러리를 불러와서 바로 사용할 수 있습니다.
먼저 어떻게 사용할 수 있는지 확인해보고, 큐(Queue)를 직접 구현까지 해보도록 하겠습니다.
3. 큐(Queue) 코드
# deque 불러오기
from collections import deque
#------------------------------
# 큐 정의
queue = deque()
#------------------------------
# 큐의 맨 끝에 데이터 삽입하기
queue.append("홍길동1")
queue.append("홍길동2")
queue.append("홍길동3")
queue.append("홍길동4")
queue.append("홍길동5")
print(queue)
#------------------------------
# queue 접근
print(queue[0])
print(queue[1])
print(queue[2])
#------------------------------
# queue 삭제
print(queue.popleft())
print(queue.popleft())
#------------------------------
# 삭제여부 확인
print(queue)
#------------------------------
#------------------------------ 단위로 끊어서 구현해보시면 됩니다.
혹시 몰라서 colab으로 해당 코드를 모두 구현해 놓았으니 참고하여 주시면 감사드리겠습니다. → 링크
4. 큐(Queue) 구현
class Queue:
def __init__(self):
self.front = None
self.rear = None
def enqueue(self, item):
new_node = LinkedListNode(item)
# 큐가 비어있는지 체크
if self.rear is None:
self.front = new_node
self.rear = new_node
else:
# 새로운 노드를 rear 다음에 삽입
self.rear.next = new_node
# 새로운 노드를 rear 재할당
self.rear = new_node
def dequeue(self):
# 큐가 비어있는지 체크
if self.front is not None:
# front값을 old front에 삽입
old_front = self.front
# old front 다음 값을 front값에 삽입
self.front = old_front.next
# 큐가 비어있는지 체크
if self.front is None:
# rear를 None으로 지정한다.
self.rear = None
return old_front
지금까지 큐(queue)에 대해서 알아보았습니다.
궁금하신 사항이 있으시면 언제든지 코멘트 부탁드립니다.
해당 글이 도움이 되셨다면 공감 부탁드립니다.
감사합니다.
기능: 연산이 무엇을 하는지
구현 : 연산의 기능을 어떻게 하는지
추상화라는 것은 기능은 몰라도 구현이 가능하도록 하는 것을 추상화했다 라고 말한다.
자료구조를 추상화한 것을 추상 자료형이라고 하며, 오직 기능만으로 데이터를 다룰 수 있도록 하는 것을 말함
추상자료형을 왜 배우나?
추상자료형을 생각하면 코드의 흐름을 파악하는데 더 쉽다?