Language/Python

스택(Stack) 개념과 파이썬 문서 가이드

CleanCoder 2021. 1. 22. 15:49

스택이란?

스택(Stack) Last In First Out—LIFO의 구조를 가지는 자료구조(Data Structure)를 일컫는다. 

 

선입선출인 큐(Queue)와 비교된다. 구현은 큐나 링크드 리스트와 같은 다른 자료형에 비해 쉬운 편이다.

 

스택에서 데이터를 넣는 것을 push , 데이터를 꺼내는 것을 poppop이라고 합니다.

그리고 push pop을 하는 위치를 top이라고 하고, 스택의 가장 아랫부분을 bottom이라고 합니다.

 

스택의 예로는 일상생활에서 책을 쌓고, 책을 꺼내는 것과 브라우저에서 웹 페이지 클릭 후 뒤로 가기 버튼을 누르는 것과 같습니다.

 

Python에서의 동작

파이썬에서는 List를 이용하여 스택을 구현합니다.

 

리스트 자료 형은 몇 가지 메서드들을 더 갖고 있습니다. 이것들이 리스트 객체의 모든 메서드 들입니다:

 

list.append(x)

리스트의 끝에 항목을 더합니다. a[len(a):] = [x] 와 동등합니다.

 

list.extend(iterable)

리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장합니다. a[len(a):] = iterable 와 동등합니다.

 

list.insert(i, x)

주어진 위치에 항목을 삽입합니다. 첫 번째 인자는 삽입되는 요소가 갖게 될 인덱스입니다. 그래서 a.insert(0, x) 는 리스트의 처음에 삽입하고, a.insert(len(a), x) 는 a.append(x) 와 동등합니다.

 

list.remove(x)

리스트에서 값이 x 와 같은 첫 번째 항목을 삭제합니다. 그런 항목이 없으면 ValueError를 일으킵니다.

 

list.pop([i])

리스트에서 주어진 위치에 있는 항목을 삭제하고, 그 항목을 돌려줍니다. 인덱스를 지정하지 않으면, a.pop() 은 리스트의 마지막 항목을 삭제하고 돌려줍니다. (메서드 시그니처에서 i 를 둘러싼 대괄호는 매개변수가 선택적임을 나타냅니다. 그 위치에 대괄호를 입력해야 한다는 뜻이 아닙니다. 이 표기법은 파이썬 라이브러리 레퍼런스에서 지주 등장합니다.)

 

list.clear()

리스트의 모든 항목을 삭제합니다. del a[:] 와 동등합니다.

 

list.index(x[, start[, end]])

리스트에 있는 항목 중 값이 x 와 같은 첫 번째 것의 0부터 시작하는 인덱스를 돌려줍니다. 그런 항목이 없으면 ValueError 를 일으킵니다.

선택적인 인자 start 와 end 는 슬라이스 표기법처럼 해석되고, 검색을 리스트의 특별한 서브 시퀀스로 제한하는 데 사용됩니다. 돌려주는 인덱스는 start 인자가 아니라 전체 시퀀스의 시작을 기준으로 합니다.

 

list.count(x)

리스트에서 x 가 등장하는 횟수를 돌려줍니다.

 

list.sort(*, key=None, reverse=False)

리스트의 항목들을 제자리에서 정렬합니다 (인자들은 정렬 커스터마이제이션에 사용될 수 있습니다. 설명은 sorted() 를 보세요).

 

list.reverse()

리스트의 요소들을 제자리에서 뒤집습니다.

 

list.copy()

리스트의 얕은 사본을 돌려줍니다. a[:] 와 동등합니다.