1-1 스택이란?
스택은 후입선출(LIFO)의 형태로 제한되는 자료구조.
ex) A - B - C 순서대로 쌓아져 있다면 꺼낼 때는 C - B - A 순서로 나온다.
입력의 역순으로 자료를 꺼내야 할 때 사용.
스택의 연산
- push(e) : 새로운 요소 e를 스택의 맨 위에 추가
- pop( ) : 스택의 맨 위에 있는 요소를 꺼내서 반환
- isEmpty( ) : 스택이 비어 있으면 True를, 아니면 False를 반환
- isFull( ) : 스택이 가득 차 있으면 True를, 아니면 False를 반환
- peek( ) : 스택의 맨 위에 있는 항목을 삭제하지 않고 반환
- size( ) : 스택에 들어 있는 전체 요소의 수를 반환
오버플로 : 포화 상태인 스택에 새로운 요소를 삽입하면 오류 발생
언더 플로 : 공백의 상태의 스택에 pop( )나 peek( )를 호출하면 오류 발생
1-2 배열구조로 스택 구현하기
- array[ ] : 스택 요소들을 저장할 배열
- capacity : 스택의 최대용량. 저장할 수 있는 요소의 최대 개수(상수)
- top : 상단 요소의 위치(변수, 인덱스)
스택 초기화(공백): top = -1
포화상태 : top == capacity-1
## 스택의 공백 상태와 포화 상태 검사
def isEmpty():
if top == -1 : return True
else : return False
def isFull(): return top == capacity
## 스택의 삽입 연산
def push(e):
if not isFull():
top += 1
array[top] = e
else :
print("stack overflow")
exit()
## 스택의 삭제 연산
def pop() :
if not isEmpty():
top -= 1
return array[top+1]
else :
print("stack underflow")
exit()
## 스택의 peek()연산
def peek():
if not isEmpty():
return array[top]
else :
print("stack underflow")
exit()
## 문자열 역순 출력 프로그램
s = ArrayStack(100)
msg = input("문자열 입력: ")
for c in msg :
s.push(c)
print("문자열 출력: ", end='')
while not s.isEmpty():
print(s.pop(), end='')
print()
## 괄호 검사 프로그램
def checkBrackets(statement):
stack = ArrayStack(100)
for ch in statement:
if ch in ('{', '[', '('):
stack.push(ch)
elif ch in ('}', ']', ')'):
if stack.isEmpty():
return False
else:
left = stack.pop()
if (ch == "}" and left != "{") or \ (ch == "]" and left != "[") or \ (ch == ")" and left != "(") :
return False
return stack.isEmpty()
1-3 시스템 스택과 순환 호출
순환 : 함수가 자기 자신을 다시 호출 하여 문제를 해결하는 프로그래밍 기법ex) 팩토리얼 계산, 하노이탑 자료구조(이진 트리)
## 순환 구조의 팩토리얼 함수
def factorial(n):
if n == 1:
return 1
else :
return n * factorial(n-1)
순환 함수는 자신을 순환적으로 호출하는 부분과 순환 호출을 멈추는 부분으로 구성
'CS공부🖥️ > 자료구조' 카테고리의 다른 글
자료구조와 알고리즘 with 파이썬 chapter6. 정렬 (0) | 2025.02.02 |
---|---|
자료구조와 알고리즘 with 파이썬 chapter5. 알고리즘 개요 (1) | 2025.01.24 |
자료구조와 알고리즘 with 파이썬 chapter4.트리 (1) | 2025.01.23 |
자료구조와 알고리즘 with 파이썬 chapter3 (0) | 2025.01.09 |
자료구조와 알고리즘 with 파이썬 chapter2 (1) | 2025.01.03 |