교수님께서 보여주신 스택의 아주 좋은 예시
LIFO(Last-In First-Out) 원칙에 따라 삽입 및 제거되는 요소들의 모음
LIFO의 예시로 위의 컵 사진을 들 수 있다. 제일 마지막에 쌓인 것이 제일 먼저 나오는 구조인 것이다.
- Q. 꼭대기의 요소 외에 다른 요소에 접근할 수 있는가?
- A. 스택은 말 그대로 쌓는 것이기 때문에 정의에 따라서 불가능, 그건 스택이라고 할 수 없다.
스택에 접근할 때의 모든 동작은 꼭대기의 요소에 대해 실행한다.
InitStack
: 빈 스택 만들기IsFull
: 스택이 꽉 찼는지 확인IsEmpty
: 스택이 비어있는지 확인Peek
: 꼭대기의 요소를 읽음Push
: 꼭대기에 요소 삽입Pop
: 꼭대기의 요소 제거C를 기준으로 작성한 코드입니다.
#define MAX_STACK 100
typedef int Data;
typedef struct {
Data items[MAX_STACK];
int top;
} Stack;
void InitStack(Stack *pstack) {
pstack->top = -1;
}
bool IsFull(Stack *pstack) {
return pstack->top == MAX_STACK - 1;
}
bool IsEmpty(Stack *pstack) {
return pstack->top == -1;
}
Data Peek(Stack *pstack) {
if (IsEmpty(pstack)) {
exit(1);
}
return pstack->items[pstack->top];
}
void Push(Stack *pstack, Data item) {
if (IsFull(pstack)) {
exit(1);
}
pstack->items[++(pstack->top)] = item;
}
void Pop(Stack *pstack) {
if (IsEmpty(pstack)) {
exit(1);
}
--(pstack->top);
}