모두CBT

다음은 배열로 구현한 스택 자료구조의 push() 연산과 pop() 연… | [9급 지방직 컴퓨터일반] 17년 1회차 기출문제 상세 페이지

1[9급 지방직 컴퓨터일반] 17년 1회차
다음은 배열로 구현한 스택 자료구조의 push() 연산과 pop() 연산이다. ㉠과 ㉡에 들어갈 코드가 옳게 짝지어진 것은? (순서대로 ㉠, ㉡)
#define ARRAY_SIZE 10
#define IsFull() ((top == ARRAY_SIZE-1) ? 1: 0)
#define IsEmpty() ((top == -1) ? 1: 0)

int a[ARRAY_SIZE];
int top = -1;

void push(int d) {
if( IsFull() )
printf("STACK FULL\n");
else
( ㉠ )
}

int pop() {
if( IsEmpty() )
printf("STACK EMPTY\n");
else
( ㉡ )
}
1
a[++top] = d;, return a[--top];
2
a[++top] = d;, return a[top--];
3
a[--top] = d;, return a[++top];
4
a[top--] = d;, return a[top++];
해설

㉠에는 a[++top] = d;, ㉡에는 return a[top--];가 들어간다.

top의 초깃값이 -1이므로 push는 top을 먼저 1 증가시킨 뒤 그 위치에 저장해야 하고(전위 증가), pop은 현재 top 위치의 값을 반환한 뒤 top을 1 감소시켜야 한다(후위 감소). 즉 top은 항상 마지막으로 저장된 원소를 가리킨다.

  • return a[--top];는 top을 먼저 줄여 마지막 원소 바로 아래 값을 반환하므로 꺼내는 원소가 어긋난다.
  • a[--top] = d;는 첫 push에서 a[-2]에 접근해 배열 범위를 벗어난다.
  • a[top--] = d;는 첫 push에서 a[-1]에 저장하고 top을 오히려 감소시킨다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.