algorithm/기초
자료구조: 스택, 큐, 재귀함수
S2채닝S2
2024. 8. 26. 13:52
자료구조
- 데이터를 저장하는 구조
- 데이터를 표현/관리/처리하기 위한 구조
- 삽입(push)과 삭제(pop) 두 함수로 구성된다.
- 오버플로(Overflow): 자료구조의 최대 수용범위를 벗어난 연산 수행 시(접근 시) 발생, 최솟값부터 + 연산
- 언더플로(Underflow): 자료구조의 최소 수용범위를 벗어난 연산 수행 시(접근 시) 발생, 최댓값부터 - 연산
오버플로와 언더플로 예시 1 - Python
# 오버플로 예시1 (python)
list = [0, 1, 2, 3]
print(list[4]) # IndexError: list index out of range
# 언더플로 예시1 (python)
print(list[-1]) # 3 출력
오버플로와 언더플로 예시 2 - Java
// 오버플로 예시2 (java)
int intOver = 2147483647 + 3 // int 타입이 표현할 수 있는 최댓값(2147483647)에서 3을 초과
System.out.println(intOver) // -2147483644 출력 (최솟값(-2147483648) + 3 출력)
// 언더플로 예시2 (java)
int intUnder = -2147483647 - 3 // int 타입이 표현할 수 있는 최솟값(-2147483648)에서 3을 초과
System.out.println(intUnder) // 2147483644 출력 (최댓값(2147483647) - 3 출력)
스택 (Stack)
- 데이터를 차례대로 쌓아올린 자료구조
- 선입후출(First In Last Out) 혹은 후입선출(Last In First Out) 자료구조라고 함.
- 파이썬에서 스택을 이용할 때에는 별도의 라이브러리가 필요 없음. 기본 리스트에서 append(), pop() 메서드 이용
#스택
stack = []
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(4)
stack.pop()
print(stack) # 최하단 원소부터 출력
print(stack\[::-1\]) # 최상단 원소부터 출력
큐 (Queue)
- 먼저 넣은 데이터가 먼저 나오는 형식의 자료구조
- 선입선출(First In First Out) 자료구조이며, 대기열이라고도 함
# 큐
from collections import deque
queue = deque()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft()
queue.append(1)
queue.append(4)
queue.popleft()
print(queue) #먼저 들어온 순서대로 출력
queue.reverse() # 역순 정렬
print(queue) # 나중에 들어온 원소부터 출력
재귀함수 (Recrusive Function)
- 자기 자신을 다시 호출하는 함수
- 컴퓨터 내부에서 재귀함수의 수행은 스택 자료구조를 이용함. 함수를 계속 호출할 시, 마지막으로 호출한 함수가 수행을 끝내야 다음 한수를 호출하며, 연속적으로 호출된 함수는 메인 메모리의 스택 공간에 적재됨.
- 종료 코드가 없으면 무한히 호출되므로 반드시 종료 조건을 명시해야 함.
# 재귀함수 - 팩토리얼 예제
def factorial(n):
if n <= 1:
return 1
else:
return n \* factorial(n - 1)
print(factorial(5))