1. 스택
스택이란 주로 실행취소 기능을 사용할 때 자주 사용하는 자료구조로
가장 마지막에 입력된 값이 가장 먼저 출력되는 형태의 자료구조다.
여기서 새로운 데이터를 넣는 것을 push
최상단에 어떤 데이터가 있는지 확인하는 것을 peek
데이터를 꺼내는 것을 pop
이라고 한다.
1-1. 구현
스택을 구현해보자
SIZE = 10
stack = [None for _ in range(SIZE)]
top = -1 # 초기값 바닥
stack
# 출력결과
# [None, None, None, None, None, None, None, None, None, None]
10칸 짜리 스택을 만들었다. SIZE 변수 값에 따라 칸이 결정되고 굳이 10개일 필요는 없다.
top += 1
stack[top] = '커피'
top += 1
stack[top] = '녹차'
top += 1
stack[top] = '꿀물'
stack
# 실행결과
# ['커피', '녹차', '꿀물', None, None]
Push를 통해 자료를 넣은 모습, 그러나 단순 배열처럼 보인다.
이해를 위해 for문을 사용하여 출력해보자
print('--스택상태--')
for i in range(len(stack)-1, -1, -1):
print(stack[i])
print('-----------')
# 실행 결과
# --스택상태--
# None
# None
# 꿀물
# 녹차
# 커피
# -----------
이제 가장 먼저 들어간 커피가 최하단에 위치한 걸 볼 수 있다.
data = stack[top]
stack[top] = None
top -= 1
print(f'pop -> {data}')
print('--스택상태--')
for i in range(len(stack)-1, -1, -1):
print(stack[i])
# pop -> 꿀물
# --스택상태--
# None
# None
# None
# 녹차
# 커피
pop을 구현해본 모습
최상단에 위치한 데이터가 출력된 모습을 확인할 수 있다.
if top == -1:
print('더 이상 데이터가 없습니다.')
else:
pass
예외처리로 만약 데이터가 없을 경우를 대비한 부분
전체 코드는 아래와 같다.
# 스택 전체 구현
# global 변수
SIZE = 0
stack = []
top = -1
# 스택이 꽉 찼는지 여부 확인
def isStackFull():
global SIZE, stack, top # 전역변수를 그대로 함수에서도 쓸래!
if(top >= SIZE -1):
return True
else:
return False
# 스택이 비어있는지 여부 확인
def isStackEmpty():
global SIZE, stack, top
if(top == -1):
return True
else:
return False
# 스택에 데이터 추가
def push(data):
global SIZE, stack, top
if (isStackFull()):
print('Stack is Full')
return
else:
top +=1
stack[top] = data
def pop():
global SIZE, stack, top
if(isStackEmpty()):
print('Stack is Empty!')
return None
else:
data = stack[top]
stack[top] = None
top -= 1
return data
# top의 데이터 확인
def peek():
global SIZE, stack, top
if isStackEmpty():
print('Stack is Empty')
return None
else:
return stack[top]
# 메인 엔트리
if __name__ == '__main__':
top = -1
SIZE = int(input('스텍사이즈 입력 >> '))
stack = [None for _ in range(SIZE)]
while True:
select = input('삽입(I)/추출(E)/확인(V)/종료(X) >> ')
if select.lower() == 'x': # 입력값 소문자로 변경, 종료
break
elif select.lower() == 'i': # 삽입
data = input('추가할 데이터 >> ')
push(data)
print(f'스택상태 : {stack}')
elif select.lower() == 'e': # 추출
data = pop()
print(f'추출 데이터 : {data}')
print(f'스택상태 : {stack}')
elif select.lower() == 'v': # 확인
data = peek()
print(f'확인 데이터 : {data}')
print(f'스택상태 : {stack}')
else:
continue
print('스택 프로그램 종료')
'Algorithm > 자료구조' 카테고리의 다른 글
자료구조 - 비선형자료구조 - 트리 (0) | 2023.02.24 |
---|---|
자료구조 - 선형자료구조 - 큐 (0) | 2023.02.24 |
자료구조 - 선형자료구조 - 단순연결리스트 (0) | 2023.02.15 |
자료구조 - 선형자료구조 - 선형리스트 (0) | 2023.02.15 |
자료구조 (0) | 2023.02.15 |