C언어 문서화

(C언어)15. 스택(stack)

Mosu(정종인) 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


반응형