본문 바로가기

[C언어]

[c언어] FILO(First In Last Out) Stack 배열로 구현

안녕하세요 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.
해당 컨텐츠는 컴공의 정석인 '열혈자료구조' 도서에서 발췌 및 구현하였습니다.