📌 개념
→ 자료를 차곡차곡 쌓아 올린 형태의 자료구조
📌 특징
- 후입선출(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 |
|---|