알고리즘

[Python] 스택(stack) 구현하기

LeeSeunghyuk 2020. 12. 27. 11:02
반응형

안녕하세요 이승혁입니다.

오늘은 파이썬으로 스택(stack) 구조를 구현해 보도록 하겠습니다.

 

스택(stack)

 

     " 후입선출, LIFO(Last In First Out), 마지막에 들어온 자료가 가장 먼저 추출 " 

 

     과자 프링글스 통을 생각하시면 됩니다.

     가장 먼저 넣은 과자는 통 맨 아래에, 가장 나중에 넣은 과자는 통 맨 위에 위치하게 됩니다.

     즉, 우리가 먹기 위해 꺼내는 과자는 가장 마지막에 들어간(후입) 과자를 먼저 꺼내게(선출) 됩니다.

 

     - 스택의 구조

출처 : https://www.programiz.com/dsa/stack

 

     - 접근 방식

       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 함수만 알고 있다면 누구나 쉽게 구현할 수 있을 것 같습니다.

 

     읽어주셔서 감사합니다

 

반응형