티스토리 뷰

반응형

 

안녕하세요 이번엔 C언어로 Stack을 구현해보겠습니다.

 

자료구조의 매우 기초적인 개념인 Stack이란 영어로 쌓아놓은 더미란 뜻입니다.

 

LIFO(Last In First Out) 방식으로 가장 최근에 들어온 데이터가 가장 먼저 나가게 됩니다.

 

 

 

 

 

스택의 구조는 위와 같이 더미처럼 구성되어 있고 push&pop을 통해 데이터를 입력 또는 출력 할 수 있습니다.

 

단, 출력시에는 더미의 가장 위에있는 데이터를 빼온 다는 것이 매우 중요합니다.

 

이제 C언어로 구현해보도록 하겠습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
#define MAX_STACK_SIZE 100
 
int stack[MAX_STACK_SIZE];
int top=-1;
 
int IsEmpty(){
    if(top<0)
        return true;
    else
        return false;
    }
int IsFull(){
    if(top>=MAX_STACK_SIZE-1)
        return true;
    else
        return false;
}
 
void push(int value){
    if(IsFull()==true)
        printf("스택이 가득 찼습니다.");
    else
        stack[++top]=value; 
}
 
int pop(){
    if(IsEmpty()==true)
        printf("스택이 비었습니다.");
    else 
        return stack[top--];
}
 
int main(){
    
    push(3);
    push(5);
    push(12);
    printf("%d ",pop());
    printf("%d ",pop());
    printf("%d ",pop());
 
    return 0;
}
 
 
cs
전체 소스코드인데요, 스택의 최대사이즈를 100으로 define해주고
 
int 자료형으로 100의 크기를 갖는 stack배열을 생성합니다.
 
여기서 top변수는 최상단의 데이터의 위치를 가리키는데요, -1로 초기화를 해주고 
 
push 함수를 통해 데이터가 입력될 때마다 1씩 증가하고
 
pop 함수를 통해 데이터가 출력될 때마다 1씩 감소합니다. 

 

top의 값을 통해 해당 스택이 가득 찼는지 혹은 비었는지를 알 수 있는데요.

 

top이 -1이면 스택이 비어있는 상태고 100보다 크면 가득 차있는것을 알 수 있습니다.

 

이 소스에서 임의로 3, 5, 12 를  차례대로 입력해 보았고

 

 

pop()함수를 통해 출력해 보았습니다.

 

 

다음과 같이 마지막에 들어간 12부터 5, 3 순서대로 출력됨을 확인하였습니다.

 

3번의 pop()을 실행 후에 한번더 호출하였더니

 

스택이 비었다는 문구를 통해 더이상 pop할 데이터가 없음을 알 수 있습니다.

 

 

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday