μ€ν(Stack)
μ€ν(Stack)μ λν΄ μ΄ν΄ν΄λ³΄κΈ°
μ€ν(Stack)
μ€ν(Stack)μ΄λ?

- μ€ν(Stack)μ μμ΄μ¬μ μμ (건μ΄, λ°μ§λ°μλ₯Ό μμλμ) λλ―Έλ₯Ό μλ―Ένλ€κ³ νλ€. μ€νμ μλ‘λ μ°½κ³ μ μμΈ λ°μ€λ, μλΉμ μμΈ μ μ λλ―Έλ±μ΄ μλ€.
 - λ°μ€λ₯Ό μμλ μμμλΆν° νλνλ μλ―μ΄, λ°λλ‘ λ°μ€λ₯Ό κΊΌλΌλλ μμμλΆν° νλνλ κΊΌλΈλ€. μ΄λ° μ μΆλ ₯ ννλ₯Ό LIFO(Last-In First-Out)μ΄λΌκ³ νλ€.
 
μ€ν μΆμμλ£ν(Stack Abstract Data Type)
- IsFull(): μ€νμ΄ λ€ μ°Όμλ, trueλ₯Ό λ°ννλ€.
 - IsEmpty(): μ€νμ΄ λΉμ΄μμλ, trueλ₯Ό λ°ννλ€.
 - push(): μ€νμ 맨 μμ itemμ μΆκ°νλ€.
 - pop(): μ€νμ 맨 μμ μμλ₯Ό μ κ±°ν΄μ λ°ννλ€.
 - peek(): μ€νμ 맨 μμ μμλ₯Ό μ κ±°νμ§ μκ³ λ°ννλ€.
 
μ€ν(Stack)μ μκ³ λ¦¬μ¦
- SP(Stack Pointer)μ μ΄κΈ°κ°μ λ°λΌμ μλ―Έκ° μ‘°κΈ λ¬λΌμ§λ€.
    
- If sp = 0
        
push(item){ if(Full) return; // Full >= N S[sp++] = item; // spλ λ£μ μ리λ₯Ό μλ―Ένλ€. } pop(){ if(Empty) return; // Empty: sp <= 0 return S[--sp] } - If sp = -1
        
push(item){ if(Full) return; // Full >= N-1 S[++sp] = item; // spλ λ£μ μ리λ₯Ό μλ―Ένλ€. } pop(){ if(Empty) return; // Empty: sp <= -1 return S[sp--] } 
 - If sp = 0
        
 - 
    
μ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©ν΄μ μ€νμ ꡬννλ©΄ λ°°μ΄κ³Όλ λ¬λ¦¬ ν¬κΈ°μ μ νμ΄ μ¬λΌμ§λ€λ μ₯μ μ΄ μλ€.

Node *S, *p; push(p){ p -> Next = S; S -> p } Node* pop(){ if(S == NULL) return NULL; p = S; S = S -> Next; return p; } 
μ€ν(Stack) ꡬν
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef struct {
	int data[MAX_STACK_SIZE];
	int top;
} StackType;
void init_stack(StackType *s){
	s->top = -1;
}
int is_empty(StackType *s){
	return (s->top == - 1);
}
int is_full(StackType *s){
	return (s->top == (MAX_STACK_SIZE - 1));
}
void push(StackType *s, int item){
	if(is_full(s)) printf("Stack is FUll\n");
	else s->data[++(s->top)] = item;
}
int pop(StackType *s){
	if(is_empty(s)) printf("Stack is Empty\n");
	else return s->data[(s->top)--];
}
int peek(StackType *s){
	if(is_empty(s)) printf("Stack is Empty\n");
	else return s->data[s->top];
}
int main(void){	
	StackType s;
	
	init_stack(&s);
	push(&s, 1);
	push(&s, 2);
	push(&s, 3);
	printf("%d\n", pop(&s));
	printf("%d\n", pop(&s));
	printf("%d\n", pop(&s));
}
μ€ν(Stack)μ μ¬μ©μ¬λ‘
- ν¨μ νΈμΆ
 - λ―Έλ‘ μ°ΎκΈ°, κ·Έλν
 - μ(expression)μ μ²λ¦¬(νμ νκΈ°λ² κ³μ°)
 - μΉ λΈλΌμ°μ  λ°©λ¬ΈκΈ°λ‘(λ€λ‘κ°κΈ°)