[파이썬] 파이썬에서 스택 & 큐 구현하기

2022. 1. 23. 10:50·Python/파이썬 함수

 

 

1. 스택


  • 스택이란?

스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸쉬(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 푸쉬한 자료부터 나오게 된다. 이처럼 나중에 넣은 값이 먼저 나오는 것을 LIFO 구조라고 한다. 반대로 FILO(First In Last Out)라고 하기도 한다.

 

 

  • 파이썬으로 구현

append() 메소드와 pop()메소드만 사용할 수 있으면 간단히 리스트로도 구현할 수 있다. 아래의 예시를 보자

 

stack = []

stack.append(1)
stack.append(2)
stack.append(3)
stack.append(4)
stack.append(5)
stack.pop()
stack.append(6)
stack.append(7)
stack.append(8)
stack.pop()
stack.pop()

print(stack)
print(stack[::-1])

 

- 결과값

>> [1, 2, 3, 4, 6]    # 하단에서부터 출력
>> [6, 4, 3, 2, 1]    # 상단에서부터 출력
  • 처음의 pop에서는 제일 나중에 들어온 값인 5가 나갔다.
  • 다음의 pop에서는 맨 위에 위치한 8과 7이 차례로 반환되었다.

 

 

 

 

2. 큐


  • 큐란?

줄을 서는 것을 의미하는 단어이다. 말 그대로 먼저 온 사람이 먼저 들어가는 것이다.

스택과는 다르게 FIFO(First In First Out) 구조이다.

 

 

 

 

  • 파이썬으로 구현

리스트형식으로도 구현할 수 있지만 데크(Deque)나 큐(Queue) 모듈을 이용하는 것을 추천한다.

리스트로 구현하면 시간복잡도가 더 높아져 비효율적일 수 있기 때문이다.

pop()을 사용하면 스택과 같은 방식이니, popleft()를 통해 삭제해야한다.

from collections import deque

queue = deque()

queue.append(1)
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)
queue.popleft()
queue.append(6)
queue.append(7)
queue.append(8)
queue.popleft()

print(queue)
print(queue[0])
print(queue[1])
# print(queue[::-1]) 불가능

 

- 결과값

>> deque([3, 4, 5, 6, 7, 8])
>> 3
>> 4
  • 제일 먼저 들어온 1, 2가 삭제된 것을 확인할 수 있다.
  • deque객체는 슬라이싱이 불가능하니 알아두자.
'Python/파이썬 함수' 카테고리의 다른 글
  • [파이썬] any()와 all()
  • [파이썬] 배열에 사용되는 함수
  • [파이썬] 내가 보려고 만든 문자열 함수 2
  • [파이썬] itertools 사용하는 법 - 경우의 수
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    Python
    os
    부스트캠프
    자바스크립트
    java
    jsp
    자바
    파이썬
    Spring
    부스트캠프 7기
    스프링부트
    오류해결
    GitHub
    MySQL
    스프링
    알고리즘
    웹개발
    부스트캠프 멤버십
    Git
    운영체제
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[파이썬] 파이썬에서 스택 & 큐 구현하기
상단으로

티스토리툴바