새소식

파이썬

[파이썬]스택이 뭐에요? 나서스가 쌓아야 되는거 아니에요?

  • -
728x90

스택은 후입 선출(나중에 들어간 놈이 먼저 나오는 놈)이라는 개념을 가진 자료구조이다.

이렇듯 입구와 출구가 하나밖에 없는 모습을 가진 자료구조이다.

 

스택의 사전적인 의미는 "쌓아놓은 더미" 입니다.

후입 선출의 LIFO라고 부르기도 하는데요. 이는 'Last in First Out'의 준말입니다.

 

스택을 다루는 연산들. 

스택의 상단에 새로운 요소를 삽입하는 연산과 삭제하는 연산 크게 두 개를 볼 수 있습니다. 

하나씩 삽입해서 넣고 뺀다는 의미로

넣을 때는 : PUSH

뺄 때는  : POP

이라고 부릅니다. 

 

스택의 추상 자료형들

 

stack() : 비어있는 새로운 스택을 만든다

isEmpty(): 스택이 비어있으면 True를 아니면 False를 반환한다.

Push(e) : 항목 e를 스택의 맨 위에 추가한다.

pop() : 스택의 맨 위에 있는 항목을 거네 반환한다.

peek() : 스택의 맨 위에 있는 항목을 삭제하지 않고 반환한다.

size() : 스택 내의 모든 항목의 개수를 반환한다.

clear() : 스택을 공백상태로 만든다.

 

 

배열을 이용해서 스택을 구현

- 데이터

top :스택 항목을 저장하는 파이썬 리스트

항목의 개수는 len(top)으로 구할 수 있음

- 연산

isEmpty(), push(), pop(), peek(), display()

항목 삽입/삭제 위치 : 리스트의 맨 뒤가 유리함 어째서?

 

 

스택의 함수 구현

 

top = [] #스택의 항목들을 담을 공백 리스트 

def isEmpty():
	return len(top) == 0
   
def push(item) :
	top.append(item) #리스트의 맨 뒤에 item을 추가
def pop():
	if not isEmpty(): #공백상태가 아니면
    	return top.pop(-1) #리스트의 맨 뒤에서 항목을 하나 꺼내고 반환해준다.
def peek():
	if not isEmpty(): #공백상태가 아니면
    	return top[-1] #맨 뒷 항목을 반환(삭제하지 않음)


def size(): return len(top) #스택의 크기
	def clear():
    	global top #top은 전역변수로 지정
        top = [] #스택의 초기화

 

 

스택의 클래스 구현 (함수로 하면 되는데, 왜 클래스로 해요?)

스택을 한 번만 사용할 거면 함수로 해도 되지만, 여러 개의 스택을 활용해야 할 경우에는 클래스를 활용하는 거야.

스택을 만들 때마다 함수를 만들어 줄 수는 없으니까.

class Stack:
	def__init__(self) :
    	self.top = []
        

def isEmpty(self):return len(self.top) == 0
def size(self): return len(self.top)
def clear (self):self.top= [] #전역 변수 선언이 필요 없다.


def push(self, item):
	self.top.append(item)
    
def pop(self) :
	if not self.isEmpty():
    	return self.top.pop(-1)
        
def peek(self):
	if not self.isEmpty():
    	return self.top[-1]

 

 

그럼 스스로 숫자 1~10까지 차례대로 짝수 스택과 홀 수 스택에 넣는 코드를 작성해보자~~~

댓글에 남겨주시면 피드백해드리겠습니다!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.