👉 데이터에 무엇을 하고 싶은지, 연산의 기능들만 가지고 있음
👉 연산들을 정확히 어떻게 구현할 건지에 대한 내용은 추상 자료형에 포함❌
👉 정확히 데이터를 어떻게 저장할 건지, 데이터 간 관계를 어떻게 유지할 건지, 각 연산들을 구체적으로 어떻게 할지 모든 것을 묶어 놓은 개념
👉 자료 구조보다 추상 자료형을 생각하면 코드의 흐름에 집중할 수 있다
👉 기능을 먼저 생각하고 구현을 어떻게 할지 결정한다
# deque
# Doubly-ended-queue의 약자
# 맨 앞과 뒤에 데이터를 삽입하고 삭제할 수 있게 해주는 자료형
# deque 는 파이썬 collections 모듈에서 가지고 온다
from collections import deque
queue = deque()
# 큐의 맨 끝에 데이터 삽입
queue.append("자현")
queue.append("정호")
queue.append("준규")
queue.append("찬휘")
print(queue)
# 큐의 가장 앞 데이터에 접근
print(queue[0])
# 큐 맨 앞 데이터 삭제
print(queue.popleft())
print(queue.popleft())
print(queue.popleft())
print(queue)
# deque(['자현', '정호', '준규', '찬휘'])
# 자현
# 자현
# 정호
# 준규
# deque(['찬휘'])
동적 배열 | 더블리 링크드 리스트 | |
---|---|---|
맨 앞 삭제 | ||
맨 뒤 삽입 | 분할 상환 | |
맨 앞 접근 |
👉 큐는 더블리 링크드 리스트로 구현하는 것이 더 효율적
👉 실제 Python 내부적으로도 더블리 링크드 리스트로 구현되어 있다
from collections import deque
stack = deque()
# 스택 맨 끝에 데이터 추가
stack.append("J")
stack.append("a")
stack.append("h")
stack.append("y")
stack.append("e")
stack.append("o")
stack.append("n")
print(stack)
# 맨 끝 데이터 접근
print(stack[-1])
# 맨 끝 데이터 삭제
print(stack.pop())
print(stack.pop())
print(stack.pop())
print(stack)
# deque(['J', 'a', 'h', 'y', 'e', 'o', 'n'])
# n
# n
# o
# e
# deque(['J', 'a', 'h', 'y'])
동적 배열 | 더블리 링크드 리스트 | |
---|---|---|
맨 뒤 삭제 | 분할 상환 | |
맨 뒤 삽입 | 분할 상환 | |
맨 뒤 접근 |
👉 스택은 동적 배열, 더블리 링크드 리스트 둘 다 효율적
key-value
데이터 쌍 삽입key
를 이용한 데이터 탐색key
를 이용한 데이터 탐색grades = {}
# key - value 데이터 삽입
grades["자현"] = 70
grades["정호"] = 90
grades["준규"] = 80
grades["찬휘"] = 100
print(grades)
# key 를 이용해서 value 탐색
print(grades["찬휘"])
print(grades["준규"])
# key 를 이용한 삭제
grades.pop("정호")
grades.pop("자현")
print(grades)
# {'자현': 70, '정호': 90, '준규': 80, '찬휘': 100}
# 100
# 80
# {'준규': 80, '찬휘': 100}
해시 테이블 | |
---|---|
key-value 쌍 삽입 | (평균) |
key를 이용한 탐색 | (평균) |
key를 이용한 삭제 | (평균) |
길이 확인 |
👉 실제로 해시 테이블을 이용해서 구현되어 있는 딕셔너리
finished_classes = set()
# 데이터 저장
finished_classes.add("자료 구조")
finished_classes.add("알고리즘")
finished_classes.add("프로그래밍 기초")
finished_classes.add("인터렉티브 웹")
finished_classes.add("데이터 사이언스")
print(finished_classes)
# 중복 데이터 저장 시도
finished_classes.add("자료 구조")
finished_classes.add("알고리즘")
print(finished_classes)
# 데이터 탐색
print("컴퓨터 개론" in finished_classes)
print("자료 구조" in finished_classes)
# 데이터 삭제
finished_classes.remove("자료 구조")
finished_classes.remove("알고리즘")
print(finished_classes)
# {'자료 구조', '알고리즘', '인터렉티브 웹', '프로그래밍 기초', '데이터 사이언스'}
# {'자료 구조', '알고리즘', '인터렉티브 웹', '프로그래밍 기초', '데이터 사이언스'}
# False
# True
# {'인터렉티브 웹', '프로그래밍 기초', '데이터 사이언스'}
해시 테이블 | |
---|---|
key-value 쌍 삽입 | (평균) |
key를 이용한 탐색 | (평균) |
key를 이용한 삭제 | (평균) |
길이 확인 |
👉 실제로 해시 테이블을 이용해서 구현되어 있는 세트
👉value
는 저장하지 않고key
만 저장하는 해시 테이블
👉 순서를 저장할 팔요 없이 단순히 데이터를 삽입, 탐색, 삭제하고 싶을 때는 set