[ 자료구조 ] 자료구조 이론 정리(2)

2025. 3. 20. 17:46·알고리즘/알고리즘 공부

I . Deque(데크)

1. Deque의 개념과 구조

deque 는 Double-Ended-Queue의 줄임말로, 양방향에서 데이터를 처리할 수 있는 Queue형 자료구조이다.

2. Deque의 메서드 정리

from collections import deque

deq = deque(['a','b','c'])
arr = ['1','2','3']

deq.append('d') # deque(['a', 'b', 'c', 'd'])
deq.appendleft('e') # deque(['e', 'a', 'b', 'c', 'd'])
deq.pop() # deque(['e', 'a', 'b', 'c'])
deq.popleft() # deque(['a', 'b', 'c'])
deq.extend(arr) # deque(['a', 'b', 'c', '1', '2', '3'])
deq.extendleft(arr) # deque(['3', '2', '1', 'a', 'b', 'c', '1', '2', '3'])
deq.rotate(1) # deque(['3', '3', '2', '1', 'a', 'b', 'c', '1', '2'])
deq.rotate(-1) # deque(['3', '2', '1', 'a', 'b', 'c', '1', '2', '3'])

 

deque.append(x) : x를 데크의 오른쪽 끝에 삽입한다
deque.appendleft(x) : x를 데크의 왼쪽 끝에 삽입한다
deque.pop() : 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서는 삭제한다
deque.popleft() : 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서는 삭제한다
deque.extend(array) : 배열 array를 순환하면서 데크의 오른쪽에 추가한다
deque.extendleft(array) : 배열 array를 순환하면서 데크의 왼쪽에 추가한다
deque.remove(x) : x를 데크에서 찾아 삭제한다
deque.rotate(num) : 데크를 num만큼 회전한다 (양수면 오른쪽, 음수는 왼쪽으로)

 

II. Heap(힙)

1. 힙의 개념 및 정리

  • 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조
  • 여러 값 중, 최대값과 최소값을 빠르게 찾아내도록 만들어진 자료구조
  • 반정렬 상태를 유지
    ex. 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큼 / 작음
  • 이진탐색트리(BST)와 달리 중복된 값이 허용된다.

2. 힙의 데이터 삽입/삭제

A) 들어올 새 노드를 우선순위가 가장 낮다는 가정을 하고 맨 끝 위치에 저장
B) 부모 노드와 우선 순위를 비교해서 위치가 바뀌어야 하면 바꾼다.
C) 올바르게 위치할 때까지 B 반복

3. 힙의 표현

  • 왼쪽 자식의 인덱스 = (부모의 인덱스) * 2
  • 오른쪽 자식의 인덱스 = (부모의 인덱스) * 2 + 1
  • 부모의 인덱스 = (자식의 인덱스) / 2

4. 힙 : 파이썬에서의 구현

import heapq

hq = []

heapq.heappush(hq, 4)
heapq.heappush(hq, 1)
heapq.heappush(hq, 3)
heapq.heappush(hq, 7)

heapq.heappop(hq) # 1

x = [4, 3, 1, 2, 5, 6]
print(x) # [4, 3, 1, 2, 5, 6]
heapq.heapify(x)
print(x) # [1, 2, 4, 3, 5, 6]

 

 

 

'알고리즘 > 알고리즘 공부' 카테고리의 다른 글

[ 동적계획법 ] Dynamic Programming (DP) 이론정리  (0) 2025.04.06
[ 재귀 ] 재귀 이론정리(2)  (0) 2025.03.28
[ 재귀 ] 재귀 이론정리(1)  (0) 2025.03.28
[ 자료구조 ] 자료구조 이론 정리(1)  (0) 2025.03.20
[ Python ] 파이썬 뒤집기 방법 ( Reverse , [::-1] )  (0) 2025.03.15
'알고리즘/알고리즘 공부' 카테고리의 다른 글
  • [ 재귀 ] 재귀 이론정리(2)
  • [ 재귀 ] 재귀 이론정리(1)
  • [ 자료구조 ] 자료구조 이론 정리(1)
  • [ Python ] 파이썬 뒤집기 방법 ( Reverse , [::-1] )
swallow8801
swallow8801
  • swallow8801
    제비집
    swallow8801
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • KT AIVLE SCHOOL (16)
        • 복습노트 (7)
        • 스터디 (5)
        • 프로젝트 (4)
        • 빅프로젝트 (0)
      • 알고리즘 (43)
        • 백준 (27)
        • 알고리즘 공부 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    2609
    BOJ
    KT 에이블스쿨
    웹크롤링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
swallow8801
[ 자료구조 ] 자료구조 이론 정리(2)
상단으로

티스토리툴바