안녕하세요 이승혁입니다.
오늘은 파이썬으로 스택(stack) 구조를 구현해 보도록 하겠습니다.
※ 스택(stack) ?
" 후입선출, LIFO(Last In First Out), 마지막에 들어온 자료가 가장 먼저 추출 "
과자 프링글스 통을 생각하시면 됩니다.
가장 먼저 넣은 과자는 통 맨 아래에, 가장 나중에 넣은 과자는 통 맨 위에 위치하게 됩니다.
즉, 우리가 먹기 위해 꺼내는 과자는 가장 마지막에 들어간(후입) 과자를 먼저 꺼내게(선출) 됩니다.
- 스택의 구조
- 접근 방식
1. 빈 리스트 생성(스택으로 사용)
2. append 함수로 데이터 추가(push)
3. pop 함수를 사용해 데이터 추출(pop)
4. 클래스로 구현
class stack():
stack_list=[]
def __init__(self):
print('비어있는 스택이 생성되었습니다.',self.stack_list)
def pushdata(self,data):
self.stack_list.append(data)
return print('스택 : ',self.stack_list)
def popdata(self):
if len(self.stack_list)==0:
return print('스택이 비었습니다')
data=self.stack_list.pop()
print('추출 데이터 : ',data)
return print('스택 : ',self.stack_list,'\n')
print('---스택 생성---')
st=stack()
print('---데이터 다섯 개 push---')
for i in range(1,6):
data=str(i)+'번째 데이터'
st.pushdata(data)
print('---데이터 다섯 번 pop---')
for i in range(6):
st.popdata()
스택 클래스를 선언하고
클래스 멤버 stack_list를 리스트로 선언합니다.
클래스 객체가 생성되면 __init__ 함수를 통해 스택이 생성된 것을 확인합니다.
pushdata 함수 : 인자로 사용된 데이터를 리스트의 append 함수를 통해 stack_list의 맨 뒤에 추가
결과 확인을 위해 return 값은 stack_list를 출력
popdata 함수 : 스택 변수의 길이가 0인지 확인합니다.
길이가 0인 경우 스택이 비었다는 문구를 리턴합니다.(리턴시 함수 종료)
리스트의 pop 함수를 통해 stack_list의 맨 뒤 요소를 꺼냅니다.
이 데이터를 확인하고, 스택의 구조를 확인한 결과를 리턴합니다.
눈으로 결과를 확인하기 위해 코드가 조금 더러워진 것 같습니다.
스택의 구조, append, pop 함수만 알고 있다면 누구나 쉽게 구현할 수 있을 것 같습니다.
읽어주셔서 감사합니다
'알고리즘' 카테고리의 다른 글
[Python&SQL] 재귀 함수 팩토리얼 구구단 (0) | 2021.01.03 |
---|---|
[Python] 소인수 분해하기 (2) | 2021.01.02 |
[Python] 최소공배수(LCM) 구하기 (0) | 2021.01.02 |
[Python & SQL ] 최대 공약수 구하기 (0) | 2020.12.31 |
[Python & SQL] 정수 소수 판별기 (2) | 2020.12.30 |
[Python & SQL] 완전수 판별하기 (2) | 2020.12.30 |
[Python&SQL] 소수(Prime number) 구하기 (1) | 2020.12.29 |
[Python & SQL] 약수 구하기 (6) | 2020.12.28 |