본문 바로가기
Language/Python

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

by CleanCoder 2021. 1. 22.

스택이란?

스택(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[:] 와 동등합니다.

 

 

 

 

댓글