모두CBT

25-1아래 C 프로그램의 출력 내용을 적으시오.#include &lt… | 2025년 정보처리기사실기 1회차 기출문제 상세 페이지

7

25-1

아래 C 프로그램의 출력 내용을 적으시오.

#include <stdio.h>
#include <stdlib.h>

typedef struct Item {
    int num;
    struct Item *link;
} Item;

Item *push_back(Item *head, int num) {
    Item *node = (Item *)malloc(sizeof(Item));
    node->num = num;
    node->link = NULL;
    if (head == NULL)
        return node;
    Item *cur = head;
    while (cur->link != NULL)
        cur = cur->link;
    cur->link = node;
    return head;
}

Item *bring_front(Item *head, int target) {
    if (head == NULL || head->num == target)
        return head;
    Item *before = head;
    while (before->link != NULL && before->link->num != target)
        before = before->link;
    if (before->link == NULL)
        return head;
    Item *hit = before->link;
    before->link = hit->link;
    hit->link = head;
    return hit;
}

int main(void) {
    Item *head = NULL, *cur, *tmp;
    for (int v = 7; v <= 35; v += 7)
        head = push_back(head, v);
    head = bring_front(head, 28);
    head = bring_front(head, 14);
    for (cur = head; cur != NULL; cur = cur->link)
        printf(cur == head ? "%d" : " %d", cur->num);
    while (head != NULL) {
        tmp = head;
        head = head->link;
        free(tmp);
    }
    return 0;
}
해설

14 28 7 21 35


[해설]

push_back은 새 노드를 리스트 끝에 붙이므로 처음 리스트는 7 → 14 → 21 → 28 → 35다.

bring_front는 target 값을 가진 노드를 찾아 앞 노드와의 연결을 끊고, 그 노드를 맨 앞(head)으로 옮긴다.

  • bring_front(28): 28 → 7 → 14 → 21 → 35
  • bring_front(14): 14 → 28 → 7 → 21 → 35

첫 노드는 "%d", 나머지는 " %d"로 찍어 공백으로 구분하므로 14 28 7 21 35가 출력된다.

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