반응형


- ArrayBaseStack.h -

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
#ifndef __AB_STACK_H__
#define __AB_STACK_H__
 
#define TRUE 1
#define FALSE 0
#define STACK_LEN 100
 
typedef int Data;
 
typedef struct _arrayStack
{
    Data stackArr[STACK_LEN]; // 길이가 100인 스택 형성
    int topIndex;
} ArrayStack;
 
typedef ArrayStack Stack;
 
void StackInit(Stack *pstack); // 스택 초기화
int SIsEmpty(Stack *pstack); // 스택 비어있는지 확인
 
void SPush(Stack *pstack, Data data); // 스택에 값 넣기
Data SPop(Stack *pstack); // 스택 값 빼내기 
Data SPeek(Stack *pstack); // 스택 값 보기
 
#endif
 
 
Crocus




- ArrayBaseStack.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
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include "ArrayBaseStack.h"
 
void StackInit(Stack *pstack)
{
    pstack->topIndex = -1// 배열 스택에서는 배열 번호가 0부터 시작이니 -1을 아무것도 없는상태로 정의
}
 
int SIsEmpty(Stack *pstack)
{
    if (pstack->topIndex == -1// 배열 번호가 -1이면 비어있는상태
        return TRUE;
 
    else 
        return FALSE;
}
 
void SPush(Stack *pstack, Data data)
{
    pstack->topIndex += 1// 스택을 추가하니 배열 번호를 +1해준다 
    pstack->stackArr[pstack->topIndex] = data; // 그 +1된 배열번호를 가진 배열에 data를 대입
}
 
Data SPop(Stack *pstack)
{
    int rIdx;
 
    if (SIsEmpty(pstack)) // 스택이 비었을땐 빼낼 수 없다.
    {
        printf("Stack Memory Error!");
        exit(-1);
    }
 
    rIdx = pstack->topIndex; // 현재 배열 번호를 rIdx에 저장
    pstack->topIndex -= 1// 배열 번호는 -1 해준다
 
    return pstack->stackArr[rIdx]; // rIdx에 저장된 배열번호를 가진 배열을 반환
}
 
Data SPeek(Stack *pstack)
{
    if (SIsEmpty(pstack))
    {
        printf("Stack Memory Error!");
        exit(-1);
    }
 
    return pstack->stackArr[pstack->topIndex]; // 가장 위에 있는 스택을 나타내준다.
}
 
 
Crocus




- ArrayBaseStackMain.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
 
#include <stdio.h>
#include "ArrayBaseStack.h"
 
int main(void)
{
    //Stack의 생성 및 초기화
 
    Stack stack;
    StackInit(&stack);
 
    //데이터 넣기
    SPush(&stack1);
    SPush(&stack2);
    SPush(&stack3);
    SPush(&stack4);
    SPush(&stack5);
 
    //데이터 꺼내기
    while (!SIsEmpty(&stack))
        printf("%d", SPop(&stack));
 
 
    return 0;
}
 
 
Crocus







반응형