[자료구조] - Python으로 스택 간단 구현하기

2022. 8. 27. 00:14·Programming Language/PYTHON
목차
  1. ✅스택이란?
  2. 📍ADT Stack
  3. 🚩스택 구현하기 - 부분 설명
  4. 1. 클래스 생성과 __init__
  5. 2. isEmptyStack()과 isFullStack()
  6. 3. peek()
  7. 4. clear()
  8. 5. size()
  9. 6. display()
  10. 7. push()
  11. 8. pop()
  12. 🔎전체 코드

✅스택이란?

2022.08.24 - [기타] - [자료구조] - 스택 (Stack)

 

[자료구조] - 스택 (Stack)

📌스택(Stack)의 개념 LIFO(Last In First Out) 또는 FILO(First In Last Out) 형태로 동작하는 선형 자료 구조 스택(Stack)의 사전적 의미는 "더미", "쌓다"로 자료 구조의 스택도 데이터를 순차적으로 나열한..

yks-study.tistory.com


 

📍ADT Stack

더보기
ADT(Abstract Data Type)란?
프로그래밍 언어에서 사용되는 데이터형을 정의함에 있어서 그 데이터형에 적용 가능한 연산 형식과 제약 조건 등만을 보여주고 실제로 그 연산이 어떻게 구체적으로 표현되어 있는지는 알 수 없게 하는 기능.
출처 : 추상 데이터형 [abstract data type, 抽象-型] (컴퓨터인터넷IT용어대사전, 전산용어사전편찬위원회)

→ 간단히 말해, 구현 방법은 알리지 않고 실제 기능이나 형식(e.g. 함수)을 정의해 놓은 것.
  • push(item) : 스택에 데이터(item) 추가
  • pop() : 스택 맨 위 원소를 제거하고 반환
  • peek() : 스택의 맨 위의 값을 반환 (제거하지 않음)
  • clear() : 스택 안 모든 값 강제 초기화
  • isEmptyStack() : 스택이 비어있는지 여부 확인 (비어있다면 True, 비어있지 않다면 False)
  • isFullStack() : 스택이 가득 찼는지 여부 확인 (차 있다면 True, 차있지 않다면 False)
  • size() : 현재 스택에 들어있는 원소의 개수 반환 (크기 확인)
  • display() : top 위치에 있는 원소부터 차례대로 출력

 

 

 

 

🚩스택 구현하기 - 부분 설명

 

1. 클래스 생성과 __init__

class STACK:
    def __init__(self, max_size=5):
        self.stack = []
        self.top = -1
        self.max = max_size-1

STACK이라는 클래스를 생성해주었다.

 

__init__ 함수

  1. 원소를 넣어줄 리스트 생성
    이 리스트가 원소가 들어갈 스택 역할을 하는 것이다.
  2. top 변수를 선언해준다.
    top가 -1인 이유는 스택이 비어있는 상태로 설정해주기 위함이고, 리스트는 0번지부터 시작하기 때문이다.
  3. 스택의 최대 크기를 정해준다.
    위에서 max_size를 정해주었는데, 이는 5개의 원소를 넣을 수 있다는 의미로 정해주었다.
    max_size-1을 해준 이유는 첫 번째 원소의 인덱스 값이 0이기 때문에 총 5칸을 만들어주기 위함이다.

 

 

2. isEmptyStack()과 isFullStack()

    def isEmptyStack(self):
        if self.top == -1:
            return True
        else:
            return False

    def isFullStack(self):
        if self.top == self.max:
            return True
        else:
            return False

push와 pop을 해주기 위해서는 먼저 스택이 완전히 비워져 있는지, 혹은 꽉 차있는지를 알아야 한다. (오버플로우, 언더플로우 확인)

따라서 스택의 상태를 검사해줄 함수 isEmptyStack()과 isFullStack()을 먼저 선언해줄 것이다.

 

isEmptyStack 함수

  1. 만약 top이 -1(스택이 완전히 비워져 있음)이라면 True를 반환하고, 아니라면 False를 반환해준다.

isFullStack 함수

  1. 만약 top이 스택의 최대 크기와 일치(스택이 완전히 차있음)한다면 True를 반환하고, 아니라면 False를 반환해준다.

 

 

3. peek()

    def peek(self):
        if self.isEmptyStack() == True:
            print("Stack is empty.")
        else:
            return self.stack[self.top]

먼저, 스택이 비어있는지 검사해주어 비어있다면 "Stack is empty."라는 메시지를 띄워준다.

비어있지 않다면 스택 맨 위의 값인 top을 반환해준다.

 

 

 

4. clear()

    def clear(self):
        self.stack = []
        self.top = -1

stack 변수를 다시 빈 리스트로 선언해주고, top의 값도 -1로 저장해준다.

 

 

 

5. size()

    def size(self):
        return len(self.stack)

len()을 이용해 스택의 크기를 반환해준다.

 

 

 

6. display()

    def display(self):
        for a in reversed(self.stack):
            print(a)

스택 안 값들을 top을 기준으로 출력해준다. (top을 제일 먼저 출력)

 

 

 

7. push()

    def push(self, item):
        if self.isFullStack() == True:
            print("Stack is full.")
        else:
            self.stack.append(item)
            self.top += 1

스택이 가득 차 있는지 검사를 해주고 가득 차 있다면 "Stack is full"을 출력해준다.

가득 차 있지 않다면 stack 안에 item 인자 값을 추가해주고, top의 위치를 1 증가시켜준다.

 

 

 

8. pop()

    def pop(self):
        if self.isEmptyStack() == True:
            print("Stack is empty.")
        else:
            pop_item = self.stack[self.top]
            del self.stack[self.top]
            self.top -= 1
            return pop_item

스택이 비어있는지 검사를 해주고 비어있다면 "Stack is empty."를 출력해준다.

완전히 비어있지 않다면 pop_item 변수에 스택의 가장 위 원소를 저장해주고, 그 값을 스택에서 삭제해준다.

top의 위치 값도 1 감소시켜준다.

마지막으로 pop_item(스택 맨 위의 값)을 반환해준다.

 

 

 

 

 

🔎전체 코드

class STACK:
    def __init__(self, max_size=5):
        self.stack = []
        self.top = -1
        self.max = max_size-1

    def isEmptyStack(self):
        if self.top == -1:
            return True
        else:
            return False

    def isFullStack(self):
        if self.top == self.max:
            return True
        else:
            return False

    def peek(self):
        if self.isEmptyStack() == True:
            print("Stack is empty.")
        else:
            return self.stack[self.top]

    def clear(self):
        self.stack = []
        self.top = -1

    def size(self):
        return len(self.stack)

    def display(self):
        for a in reversed(self.stack):
            print(a)

    def push(self, item):
        if self.isFullStack() == True:
            print("Stack is full.")
        else:
            self.stack.append(item)
            self.top += 1

    def pop(self):
        if self.isEmptyStack() == True:
            print("Stack is empty.")
        else:
            pop_item = self.stack[self.top]
            del self.stack[self.top]
            self.top -= 1
            return pop_item
저작자표시 비영리 (새창열림)

'Programming Language > PYTHON' 카테고리의 다른 글

[빡공팟 5기] | 코드업 | 6096 : [기초-리스트] 바둑알 십자 뒤집기(py)  (1) 2022.09.25
[빡공팟 5기] | 코드업 | 6095 : [기초-리스트] 바둑판에 흰 돌 놓기(설명)(py)  (1) 2022.09.23
[빡공팟 5기] | 코드업 | 6088 : [기초-종합] 수 나열하기1(py)  (1) 2022.09.22
파이썬 소켓 프로그래밍  (0) 2022.07.27
터틀 아트(Turtle Art) 그리기  (0) 2022.05.17
  1. ✅스택이란?
  2. 📍ADT Stack
  3. 🚩스택 구현하기 - 부분 설명
  4. 1. 클래스 생성과 __init__
  5. 2. isEmptyStack()과 isFullStack()
  6. 3. peek()
  7. 4. clear()
  8. 5. size()
  9. 6. display()
  10. 7. push()
  11. 8. pop()
  12. 🔎전체 코드
'Programming Language/PYTHON' 카테고리의 다른 글
  • [빡공팟 5기] | 코드업 | 6095 : [기초-리스트] 바둑판에 흰 돌 놓기(설명)(py)
  • [빡공팟 5기] | 코드업 | 6088 : [기초-종합] 수 나열하기1(py)
  • 파이썬 소켓 프로그래밍
  • 터틀 아트(Turtle Art) 그리기
602zzang
602zzang
yks_STUDY602zzang 님의 블로그입니다.
  • 602zzang
    yks_STUDY
    602zzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Programming Language (36)
        • C (15)
        • PYTHON (9)
        • RUST (12)
      • Reverse Engineering (3)
      • OS (17)
        • LINUX (17)
      • 보안 이슈 (6)
      • Digital Forensics (1)
      • CTF (8)
      • 기타 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    cyberdefenders
    백준
    umassctf2025
    코드업
    rust
    TeamH4C
    python
    공급망
    Rocky Linux
    소켓 통신
    c
    보안이슈
    보안동향
    드림핵
    bandit
    파이썬
    rustling
    P4C
    picoCTF
    빡공팟
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
602zzang
[자료구조] - Python으로 스택 간단 구현하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.