728x90

구현 논리

- Top (Index) : 가장 위에 있는 데이터의 인덱스. 스택에 아무것도 저장되어 있지 않다면 -1을 가지고 있음

    -> -1, 0은 구현하는 사람에 따라 다를 수 있고 체크하는 부분에 알맞게 해주면 됨

- Push : Top을 하나 증가시키고 Top이 가르키는 데이터에 위치 지정

- Pop : Top의 위치의 데이터를 반환하고 Top을 하나 감소

 

배열 기반의 스택 구현

- 스택 구조체

typedef struct _arrayStack
{
	Data stackArr[STACK_LEN];
	int topIndex;		// Top 위치 index
} ArrayStack;

- 초기화

void StackInit(Stack * pstack)
{
	pstack->topIndex = -1;		// -1 혹은 0
}

- 비어있는지 확인

int SIsEmpty(Stack * pstack)
{
	if(pstack->topIndex == -1)		// 초기화에 0으로 했다면 그에 맞게 변경
		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];		// Top이었던 인덱스의 데이터 반환
    			// 따로 삭제해줄 필요가 없는게 어처피 새로운 데이터가 들어옴
}

- 데이터 조회(삭제 X)

Data SPeek(Stack * pstack)
{
	if(SIsEmpty(pstack))
	{
		printf("Stack Memory Error!");
		exit(-1);
	}

	return pstack->stackArr[pstack->topIndex];		// Top 인덱스가 감소되지 않음
}

 

728x90

+ Recent posts