ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (C언어)15. 스택(stack)
    C언어 문서화 2016. 5. 8. 19:05
    반응형

    <스택>

    스택은 자료구조 중 하나이다. 

    특징 : 

    1. 먼저 들어온 데이터가 더 늦게 나간다.

    2. 반대로 말하면 늦게 들어올수록 더 빨리 나간다는 것이다.

    그림 설명 : 


    공간을 만들었다.





    0을 PUSH 했다.









    1을 PUSH했다







    2를 PUSH했다






    POP했더니 2가 나갔다








    POP했더니 1이 나갔다








    POP했더니 0이 나갔다



    구현:


    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <stdio.h>
    #include <stdlib.h>
     
    int stack[100];//stack선언, 모두 0으로 초기화
    int cnt=0;//현재 자료의 개수
     
    void push(int data, int *top){
        if(cnt==100){
            printf("warning : over flow\n");
            return;
        }
        printf("\n\ndata : %d\n\n", data);
        stack[cnt]=data;
        ++cnt;
        top=&stack[(*top)++];
    }
     
    void pop(int *top){
        if(cnt==0){
            printf("값이 없습니다.\n");
            return;
        }
        else{
            top=&stack[--cnt];
        }
    }
     
    void show(){
        int n;
        for(n=cnt; n>0--n){
            printf("%d ====> %d\n", n, stack[n-1]);
        }
    }
     
    int main(){
        int i, input;
        int the_number_of_stack;
        int *top;
        int data;
        printf("기본 자료 개수 입력 : ");
        scanf("%d", &input);
        cnt+=input;
        for(i=0; i<input; ++i){
            printf("stack[%d] : ", i);
            scanf("%d", &stack[i]);
        }
        top=&stack[input];
        while(1){
            printf("\n\n");
            printf("0 : 종료\n");
            printf("1 : PUSH\n");
            printf("2 : POP\n");
            printf("3 : SHOW\n");
            printf("0~3 선택 : ");
            scanf("%d", &input);
            if(input==0){
                return 0;
            }
            else if(input==1){
                printf("data 입력 : ");
                scanf("%d", &data);
                push(data, top);
            }
            else if(input==2){
                pop(top);
            }
            else if(input==3){
                show();
            }
        }
     
    }
    cs


    반응형

    댓글

Designed by Tistory.