[Python으로 진행하는 자료구조 공부]
단순히 혼자 기억을 상기시키는 목적의 글입니다
틀린 부분이 있을 수도 있으니, 발견 시 댓글로 남겨주시면 감사하겠습니다 :)
1. 배열
: 동일한 타입의 데이터를 순차적으로 저장하는 구조
: 각 데이터에 접근하기 위해서 인덱스를 활용함
- 장점 : 인덱스를 활용하므로 데이터 요소에 접근이 쉬움
- 단점 : 최대 배열 크기를 초기에 설정해 둬야 함. 따라서 데이터의 삭제와 삽입이 어려울 수 있음
잔여 공간 크기보다 큰 데이터를 추가할 경우 추가가 불가능하며,
정해진 크기의 배열에서 데이터 일부를 삭제하는 경우 저장 공간의 낭비가 발생함
* 파이썬은 배열 기능을 리스트 타입이 제공함
- 1차원 배열 : 인덱스는 0부터 시작.
- 2차원 배열 : 배열이 2차원이므로 인덱스도 2차원으로 존재함
ar = [[0,1,2],[3,4,5],[6,7,8]]
print(ar[0])
>>> [0,1,2]
print(ar[1][2])
>>> 5
- String이 나열되어 있는 리스트에서 특정 문자(A) 의 개수 세기
arr = ["Arr1", "Arr2", "Arr3", "Arr4", "Arr5"]
count = 0
for data in arr:
for i in range(len(data)):
if data[i] == A:
count+=1
print(count)
>>> 5
2. 큐
: FIFO ( First In First Out) -> 먼저 입력된 데이터가 먼저 출력되는 구조
: 프로세스 스케줄링 과 유사한 구조
- Enqueue = 큐에 데이터를 넣음
- Dequeue = 큐에서 데이터를 꺼냄
- 파이썬의 queue 라이브러리
- . put : enqueue의 기능
- .get : dequeue의 기능
- .qsize : queue의 크기
1) Queue : 가장 기본 구조의 큐 - FIFO 정책
import queue
data = queue.Queue() #Create New Queue
data.put(2)
data.put(3)
data.qsize()
>>> 2
data.get()
>>> 2
data.get()
>>> 3
data.qsize()
>>> 0
2) LifoQueue : 스택과 유사. 나중에 입력된 데이터가 가장 먼저 출력
import queue
data = queue.LifoQueue()
data.put(2)
data.put(3)
data.get()
>>>3
data.get()
>>>2
# 일반적인 Queue와는 다른 출력 순서임을 확인할 수 있음
3) PriorityQueue : 우선순위를 설정하고, 우선순위를 높은 순으로 데이터를 출력함
: 작은 숫자일수록 우선순위가 높은 것
import queue
data = queue.PriorityQueue()
# 앞에 저장하는 수가 우선 순위를 의미함
# 이 수가 작을 수록, 우선 순위는 높은 것
data.put((10,"apple"))
data.put((4,120))
data.put((13,12))
data.get() # 가장 우선 순위가 높은 데이터부터 출력되는 것을 볼 수 있음
>>> (4,120)
data.get()
>>> (10,'apple')
3. 스택
: LIFO ( Last In First Out) -> 마지막에 넣은 데이터를 가장 먼저 출력하는 구조
: 프로세스 구조의 함수 동작 방식, 재귀함수 사용 방식
- . push : 스택에 데이터를 넣는 기능
- . pop : 스택에서 데이터를 꺼내는 기능
* 파이썬에서는 push의 기능을 list의 append로 구현할 수 있음
- 원래 정의된 함수 사용
data_list = []
data_list.append(2)
data_list.append(5)
data_list
>>> [2,5]
data_list.pop()
>>>5
data_list.pop()
>>> 2
* 재귀 함수
: 실행 과정이 스택과 유사
: 함수 정의에 함수 자신을 다시 호출해서 반복 실행되게 하는 것
: 함수의 호출 반복이 끝날 때까지, 호출하는 부분 뒤의 실행문은 실행되지 않음
def RecursiveFunc (num):
if num ==0: # Stop condition이 필요하다
print("End")
else:
print(num, end = '')
RecursiveFunc(num-1) #재귀 함수 호출
print("Closed " + (num-1))
RecursiveFunc(8)
>>> 8 7 6 5 4 3 2 1 End
# 재귀 함수 호출 뒤의 문장이 실행됨
>>> Closed 0 #RecursiveFunc(1) 내에서, RecursiveFunc(0)이 종료된 후 print문의 실행 결과
>>> Closed 1
>>> Closed 2
>>> Closed 3
>>> Closed 4
>>> Closed 5
>>> Closed 6
>>> Closed 7
'Study > 자료구조 | 알고리즘' 카테고리의 다른 글
알고리즘(1) - 그리디 (0) | 2021.07.05 |
---|---|
4. 자료구조 - 트리 (0) | 2020.08.09 |
3. 자료구조 - 해쉬 테이블 (0) | 2020.07.29 |
2. 자료구조 - 링크드 리스트 (0) | 2020.07.25 |
0. 자료구조 / 알고리즘 (0) | 2020.07.11 |