본문 바로가기

프로그램언어/파이썬

스택

스택

스택은 가장 나중에 들어온 데이터가 가장 먼저 나가는 것으로 LIFO(Last-In-First-Out)이라고 한다.

 

자료구조에서 스택은 push()함수로 데이터를 삽입하고 pop()함수로 데이터를 삭제합니다.

 

파이썬으로 스택을 구현하기 위해 리스트를 사용하여 구현해 볼수 있습니다.

스택의 push()는 리스트의 append()함수를 이용하여 데이터를 삽입합니다.

스택의 pop()은 리스트의 pop()함수를 이용하여 데이터를 삭제합니다.

 

예제] 스택에 A, B, C를 삽입하고 pop()을 통해 두개의 데이터를 삭제해 보자.

stack = []
stack.append('A')
stack.append('B')
stack.append('C')
 
print("스택의 모든 데이터 출력")
for i in range(0, len(stack)):
    print("stack[%d] = %c" %(i, stack[i]))
 
print("스택의 데이터 삭제")
stack.pop()
for i in range(0, len(stack)):
    print("stack[%d] = %c" %(i, stack[i]))
 
print("스택의 데이터 삭제")
stack.pop()
for i in range(0, len(stack)):
    print("stack[%d] = %c" %(i, stack[i]))
실행결과]
스택의 모든 데이터 출력

stack[0] = A
stack[1] = B
stack[2] = C
스택의 데이터 삭제
stack[0] = A
stack[1] = B
스택의 데이터 삭제
stack[0] = A

 

예제1]

class Stack:
def __init__(self):
    self.items = []

def isEmpty(self):
    return not self.items

def push(self, item):

    self.items.append(item)

def pop(self):
    return self.items.pop()

def showdata(self):
    for i in range(len(self.items)):
        print("data : %c" %(self.items[i]))

test = Stack()
print(test)
print(test.isEmpty())
print("데이터 삽입")
test.push('A')
test.push('B')
test.push('C')
print("데이터 출력")
test.showdata()
print("데이터 삭제")
print(test.pop())
print(test.pop())
print(test.isEmpty())
print(test.pop())
print(test.isEmpty())
실행결과]
True
데이터 삽입
데이터 출력
data : A
data : B
data : C
데이터 삭제
C
B
False
A
True

 

예제2]

class Stack:
    #리스트를 이용하여 스택 생성
    def __init__ (self):
        self.top = []
    
    #스택의 크기를 출력
    def __len__(self):
        return len(self.top)

    #스택 내부 자료를 string으로 변환하여 반환
    def __str__(self):
        return str(self.top[::1])
    
    #스택 초기화
    def clear(self):
        self.top=[]

    #PUSH
    def push (self, item):
        self.top.append(item)

    #POP
    def pop(self):
        #if Stack is not empty
        if not self.isEmpty():
            #pop and return 
            return self.top.pop(-1)
        else:
            print("Stack underflow")
            exit()
    
    #자료가 포함되어 있는지 여부 반환
    def isContain(self, item):
        return item in self.top
    
    #스택에서 top의 값을 읽어온다
    def peek(self):
        if not self.isEmpty():
            return self.top[-1]
        else:
            print("underflow")
            exit()

    #스택이 비어있는지 확인
    def isEmpty(self):
        return len(self.top)==0
    
    #스택 크기 반환
    def size(self):
        return len(self.top)
    
test = Stack()
print(test)
print(test.isEmpty())
print("데이터 삽입")
test.push('A')
test.push('B')
test.push('C')
print("현재 스택의 위치 데이터 : ", test.peek())
test.push('D')
print("현재 스택의 위치 데이터 : ", test.peek())
print('스택 크기 : ', test.size())
print("데이터 출력")
print(test.__str__())
print("A 데이터가 있는지 확인 : ", test.isContain('A'))
print("S 데이터가 있는지 확인 : ", test.isContain('S'))
print("데이터 삭제")
print(test.pop())
print(test.pop())
print(test.isEmpty())
print(test.pop())
print(test.isEmpty())
실행결과]
[]
True
데이터 삽입
현재 스택의 위치 데이터 :  C
현재 스택의 위치 데이터 :  D
스택 크기 :  4
데이터 출력
['A', 'B', 'C', 'D']
A 데이터가 있는지 확인 :  True
S 데이터가 있는지 확인 :  False
데이터 삭제
D
C
False
B
False

'프로그램언어 > 파이썬' 카테고리의 다른 글

파이썬 가상환경 만들기  (0) 2023.03.28
7강 함수  (0) 2020.07.22
5강 딕셔너리  (0) 2020.07.15
4강 튜플  (0) 2020.07.14
3강 리스트  (0) 2020.06.18