모두CBT

다음 C 프로그램의 실행 결과는?#include <stdio.h&… | [7급 국가직 자료구조론] 23년 1회차 기출문제 상세 페이지

1[7급 국가직 자료구조론] 23년 1회차
다음 C 프로그램의 실행 결과는?
#include <stdio.h>
typedef struct stack {
int data[10]; int top;
} stack;
stack s1, s2;

void push(stack *ss, int i) {
ss->top = ss->top + 1;
ss->data[ss->top] = i;
}

int pop(stack *ss) {
return ss->data[ss->top--];
}

int size(stack *ss) {
return ((ss->top) + 1);
}

void push2(int n) {
push(&s1, n);
}

int pop2() {
if(size(&s2) == 0) {
int s = size(&s1);
for(int i = 0; i < s; i++)
push(&s2, pop(&s1));
}
return pop(&s2);
}

int main(int argc, char **argv) {
s1.top = s2.top = -1;
push2(1); push2(2); push2(3);
printf("%d ", pop2());
printf("%d ", pop2());
push2(4); push2(5);
printf("%d ", pop2());
printf("%d ", pop2());
printf("%d ", pop2());
return 0;
}
1
1 2 3 4 5
2
2 1 5 4 3
3
3 2 5 4 1
4
5 4 3 2 1
해설

실행 결과는 1 2 3 4 5이다.

push2는 항상 s1에 넣고, pop2는 s2가 비었을 때만 s1의 원소를 모두 옮긴 뒤 s2에서 꺼낸다. 옮기면서 순서가 뒤집히므로 두 스택이 큐(FIFO)처럼 동작한다.

  • 1, 2, 3 삽입 후 pop2: s2가 비어 s1의 3, 2, 1을 차례로 옮김 → s2 맨 위 1 출력
  • 다음 pop2: s2에 남은 2 출력
  • 4, 5를 s1에 삽입 후 pop2: s2에 3이 남아 있어 옮기지 않고 3 출력
  • 다음 pop2: s2가 비어 s1의 5, 4를 옮김 → 4 출력, 마지막 pop2 → 5 출력

5 4 3 2 1 같은 후입선출 순서나 일부만 뒤집힌 순서는 s2가 빌 때만 옮기는 규칙을 무시한 결과다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[7급 국가직 자료구조론] 23년 1회차 25문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요7급 국가직 자료구조론 기출문제 암기장 전체 보기