오늘의 페이퍼
[자료구조] 3. 스택
빔o0O
2025. 7. 12. 14:48
※ 방송통신대학교 컴퓨터공학과의 '자료구조' 강의 내용 기반으로 작성되었음
[1] 스택의 개념 ✅
🔑 스택의 정의
- 객체와 그 객체가 저장되는 순서를 기억하는 방법(=연산)에 관한 자료구조
- 가장 먼저 입력된 자료가 가장 나중에 출력되는 관계를 표현
→ 삭제와 삽입이 맨 위에서 발생함
→ 인덱스(첨자)라는 개념이 필요함 - 관계를 표현하기 위해서 연산이 필요하며, 객체에 대한 정의와 연산이 모여서 순서가 기억되는 스택의 추상 자료형이 완성됨
- 0개 이상의 원소를 갖는 유산 순서 리스트
- push(add) 와 pop(delete) 연산이 한 곳에서 발생하는 자료구조
[2] 스택의 추상 자료형 ✅
🔑 스택의 추상자료형
- 스택 객체 : 0개 이상의 원소를 갖는 유한 순서 리스트
→ '순서'는 연산을 통해 보장된다.
🔑 CreateStack 연산
- Stack CreateStack(정수 maxStackSize) : 스택의 크기가 maxStackSize인 빈 스택을 생성하고 반환한다.
🔑 Push 연산
- Stack Push(stack, item) : 스택이 full이 아니라면 스택의 가장 위에 item을 삽입하고 스택을 반환한다. 스택이 full이라면 stackFull을 출력한다.
🔑 Pop 연산
- Element Pop(stack) : 스택이 비어 있다면 stackEmpty를 출력하고, 그게 아니라면 스택의 가장 위에 있는 원소(element)를 삭제하고 반환한다.
🔑 StackIsFull / StackIsEmpty 연산
- Boolean StackIsFull(stack, maxStackSize)
: stack의 elements의 개수가 maxStackSize 와 같다면 TRUE, 아니라면 FALSE - Boolean StackIsEmpty(stack)
: stack 이 CreateStack(maxStackSize)와 같다면 TRUE, 아니라면 FALSE
[3] 스택의 응용
🔑 스택의 다양한 응용
- 변수에 대한 메모리의 할당과 수집을 위한 시스템 스택
- 서브루틴 호출 관리를 위한 스택
- 연산자들 간의 우선순위에 의해 계산 순서가 결정되는 수식 계산
- 인터럽트의 처리와 되돌아갈 명령 수행 지점을 저장하기 위한 스택
- 컴파일러, 순환 호출 관리
[4] 스택의 연산
🔑 스택의 삭제 연산
- 'top--' 에서 사용된 '--' 연산자의 위치에 따라 연산의 적용 순서가 달라질 수 있음
[5] 사칙연산식의 전위/후위/중위 표현
🔑 수식의 계산
- 연산자의 계산 우선순위를 생각해야 함
🔑 수식의 표기 방법
- 중위 표기법(infix notation) : 연산자를 피연산자 사이에 표기하는 방법
→ A + B - 전위 표기법(prefix notation) : 연산자를 피연산자 앞에 표기하는 방법
→ + A B - 후위 표기법(postfix notation) : 연산자를 피연산자의 뒤에 표기하는 방법
→ A B + - 일반적으로는 입력은 중위 표기법으로 수행하고 컴퓨터는 후위 표기법으로 계산하여 값을 도출한다.
- 중위 표기식의 후위 표기식 변환방법(=알고리즘)
(1) 먼저 중위 표기식을 연산자의 우선순위를 고려하여 (피연산자, 연산자, 피연산자)의 형태로 괄호로 묶어줌
(2) 각 계산뭉치를 묶고 있는 괄호 안에서 연산자를 계산뭉치의 가장 오른쪽으로 이동시킴
(3) 각 계산뭉치를 하나의 피연산자로 고려하여 위를 반복함
(4) 괄호를 모두 제거함