본문 바로가기
간단 지식/Stack

📘 Stack이란?

by 별똥별💫 2024. 3. 5.

📌 개념

→ 자료를 차곡차곡 쌓아 올린 형태의 자료구조

 

📌 특징

  • 후입선출(Last - In - Last - Out, LIFO) 리스트
  • 가장 최근에 들어온 데이터가 가장 먼저 나감
  • top이라고 하는 한 쪽 끝에서 모든 삽입, 삭제 연산이 일어나는 순서 리스트

📌 스택 구현

  • 1차원 배열 stack[ MAX_STACK_SIZE ] 사용
  • 변수 top : 가장 최근에 삽입된 요소를 가리키는 변수
  • 초기화 : top = -1 ← 공백 스택을 의미
  • 가장 먼저 삽입된 요소는 stack[0]에, 가장 최근에(마지막에) 삽입된 요소는 stack[top]에 저장

🔍 스택 구조체

 

 

 

 

 

 

 

- Stack* create() 연산

 

 

 

 

 

 

 

- int isFull() 연산 → 포화상태 여부 확인

# 스택이 가득 차 있으면 1을 반환

# 그렇지 않으면 0을 반환

 

 

 

 

 

 

- int isEmpty() 연산 → 공백상태 여부 확인

# 스택이 비어 있으면 1을 반환

# 그렇지 않으면 0을 반환

 

 

 

 

 

 

- Stack push() 알고리즘

# 스택 배열이 포화상태인지 검사

# 포화상태가 아니라면, top을 1 증가시킨 후 요소 삽입 

 

 

 

 

 

 

 

 

 

- Stack pop() 알고리즘

# 스택 배열이 공백 상태인지 검사

# 공백 상태가 아니라면, top의 요소를 삭제 후 top을 1 감소

 

 

 

 

 

 

 

 

 

 

- Stack peek() 알고리즘

# 스택 배열이 공백상태인지 검사

# 공백상태가 아니라면, top의 요소를 읽어서 반환


element peek( Stack* S ) {
    if( isEmpty( S ) ) {
        printf( "[ERROR] Stack is EMPTY!! \n" );
        return ERROR;
    }
    else{
        return S -> stack[ S -> top ];
        }
}

 

🔍 파이썬일 경우?

 
MAX_STACK_SIZE = 100  # 필요에 따라 조정

class Stack:
    def __init__(self):
        self.stack = []  # 스택으로 사용할 빈 리스트
        self.top = -1  # 스택의 최상위 인덱스를 나타냅니다. 스택이 비어 있을 경우 -1

    def is_empty(self):
        return self.top == -1

    def is_full(self):
        return self.top == MAX_STACK_SIZE - 1

    def push(self, element):
        if not self.is_full():
            self.stack.append(element)
            self.top += 1
        else:
            raise Exception("StackOverflowError")

    def pop(self):
        if not self.is_empty():
            element = self.stack.pop()
            self.top -= 1
            return element
        else:
            raise Exception("StackUnderflowError")

    def peek(self):
        if not self.is_empty():
            return self.stack[self.top]
        else:
            raise Exception("EmptyStackError")
 

'간단 지식 > Stack' 카테고리의 다른 글

📘 Stack 구현 - Linked List  (1) 2024.03.06