μ€ν(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)μ μ²λ¦¬(νμ νκΈ°λ² κ³μ°)
- μΉ λΈλΌμ°μ λ°©λ¬ΈκΈ°λ‘(λ€λ‘κ°κΈ°)