안녕하세요 Docker입니다.
자료구조의 기본이죠, Stack을 C언어로 구현해보도록 하겠습니다.
#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];
int topIndex;
}ArrayStack;
typedef ArrayStack Stack;
void StackInit(Stack * pstack);//스택 초기화
int SIsEmpty(Stack * pstack);//스택이 비어있는지 확인
void SPuch(Stack * pstack, Data data);
Data SPop(Stack * psatck);
Data SPeek(Stack * pstack);
#endif // !__AB_STACK_H
우선 헤더파일입니다.
구현할 데이터 타입(struct)와 함수들을 미리 정의해줍니다.
void StackInit(Stack* pstack) {//스택의 초기화
pstack->topIndex = -1;
}
int SIsEmpty(Stack * pstack) {
if (pstack->topIndex == -1)
return TRUE;
else
return FALSE;
}
void SPush(Stack * pstack, Data data) {
pstack->topIndex += 1;
pstack->stackArr[pstack->topIndex] = data;
}
Data SPop(Stack * pstack) {
int rIdx;
if (SIsEmpty(pstack)) {
printf("Stack Memory Error");
exit(-1);
}
rIdx = pstack->topIndex;
pstack->topIndex -= 1;
return pstack->stackArr[rIdx];
}
Data SPeek(Stack * pstack) {
if (SIsEmpty(pstack)) {
printf("Stack Memory Error!");
exit(-1);//일종의 긴급탈출 코드
}
return pstack->stackArr[pstack->topIndex];
}
int stackMainCall() {
Stack stack;
StackInit(&stack);
for (int i = 1; i < 6; i++) {
SPush(&stack, i);
}
while (!SIsEmpty(&stack))
printf("%d\n", SPop(&stack));
return 0;
}
int main() {
stackMainCall();
return 0;
}
그후 나머지 코드들을 입력해줍니다.
ps.
해당 컨텐츠는 컴공의 정석인 '열혈자료구조' 도서에서 발췌 및 구현하였습니다.