다음 C 코드는 원형 연결 리스트에 속한 모든 노드의 값들을 더하여 출… | [7급 국가직 자료구조론] 22년 1회차 기출문제 상세 페이지
1[7급 국가직 자료구조론] 22년 1회차
다음 C 코드는 원형 연결 리스트에 속한 모든 노드의 값들을 더하여 출력한다. (가)~(다)에 들어갈 내용을 바르게 연결한 것은?#include <stdio.h>(가) (나) (다)
#include <malloc.h>
typedef struct Node {
struct Node *a;
int b;
} Node;
int listSum(Node *p) {
int sum = 0;
Node *s = p;
do {
sum += [ (가) ];
p = [ (나) ];
} while ( [ (다) ] );
return sum;
}
int main() {
int MAX = 5;
int i, s;
Node *p[MAX];
for( i = 0; i < MAX; i++) {
p[i] = (Node*)malloc(sizeof(Node));
p[i]->b = i+1;
}
for( i = 0; i < MAX-1; i++)
p[i]->a = p[i+1];
p[MAX-1]->a = p[0];
s = listSum(p[0]);
printf("Sum = %d", s);
}
1
p.b p.a p != NULL
2
p->a p->b p != s
3
p->b p->a p != NULL
4
(*p).b (*p).a p != s
해설
(가) p->b, (나) p->a, (다) p != s이며, 이를 (*p).b, (*p).a 로 표기한 조합이 맞다.
b는 값, a는 다음 노드 포인터이고 포인터의 멤버 접근 p->b는 (*p).b와 같다. 원형 리스트는 끝이 NULL이 아니라 처음 노드로 돌아오므로, 출발 노드 s로 되돌아올 때 멈춰야 한다.
- p.b, p.a, p != NULL: p는 포인터라 점 연산자로 멤버에 접근할 수 없고, NULL을 만나지 않아 끝나지 않는다.
- p->a, p->b, p != s: 값 멤버와 링크 멤버가 뒤바뀌었다.
- p->b, p->a, p != NULL: 원형 리스트에는 NULL이 없어 무한 반복한다.
오류나 개정된 내용이 보이면 알려주세요