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
'Programming > Data Structure' 카테고리의 다른 글
열혈 자료구조 - 6-4. 스택을 활용한 계산기 프로그램 구현(1) (0) | 2020.12.20 |
---|---|
열혈 자료구조 - 6-3. 연결 리스트 기반의 스택 구현 (0) | 2020.12.20 |
열혈 자료구조 - 6-1. 스택의 이해와 ADT 정의 (0) | 2020.12.20 |
열혈 자료구조 - 5-2. 양방향 연결 리스트(2) (0) | 2020.12.20 |
열혈 자료구조 - 5-2. 양방향 연결 리스트(1) (0) | 2020.12.19 |