스택에 1,2,3 삽입 후 모든 원소를 삭제함과 동시에 출력하고 스택이 비었으면 1, 아니면 0 출력하기


top변수와 스택배열을 하나의 구조체로 묶고, 구조체 변수를 이용하여 포인터로 값을 수정하는 방식의 장점

=> 구조체 변수를 여러 개 선언 함으로서 스택을 여러개 구현하기 쉬움



코드

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
#include<stdio.h>
#include<stdlib.h>
 
#define max 5
typedef struct
{
    int stack[max];
    int top;
}stackType;
void init(stackType* s);
void push(stackType* s, int x);
int pop(stackType* s);
int is_full(stackType* s);
int is_empty(stackType* s);
 
int main()
{
    stackType st;
    //스택 초기화 하기
    init(&st);
    push(&st, 1); push(&st, 2), push(&st, 3);
    printf("%d\n"pop(&st));
    printf("%d\n"pop(&st));
    printf("%d\n"pop(&st));
    printf("스택이 비었는지 ? %d\n", is_empty(&st));
}
void init(stackType* s)
{
    s->top = -1;
}
int is_full(stackType* s)
{
    return s->top == max - 1;
}
int is_empty(stackType* s)
{
    return s->top == -1;
}
void push(stackType* s, int x)
{
    if (is_full(s))
    {
        fprintf(stderr, "원소가 다 찼습니다.\n");
        return;
    }
    s->stack[++(s->top)] = x;
}
int pop(stackType* s)
{
    if (is_empty(s))
    {
        fprintf(stderr, "원소가 없습니다\n");
        exit(1);
    }
    return s->stack[(s->top)--];
}
cs


결과




+ Recent posts