Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 연결 리스트의 대체 노드 출력하기 (반복문 방법)

이 문제에서는 주어진 연결 리스트를 순회하면서 하나의 노드는 건너뛰고 다음 노드를 출력하는 방식으로, 반복(iterative) 방법을 사용해 대체 노드(alternate nodes)를 출력하는 프로그램을 작성해야 합니다.

반복 방법이란 일반적으로 조건이 참(true)인 동안 계속 실행되는 루프(loop)를 사용하는 방식을 말합니다.

예를 들어, 리스트에 29, 34, 43, 56, 88이라는 노드가 있다면, 출력 결과는 29, 43, 88처럼 하나씩 건너뛴 노드들이 됩니다.

예제

입력: 29->34->43->56->88
출력: 29 43 88

접근 방법은 리스트 전체를 마지막 노드까지 순회하는 것입니다. 순회하는 동안 카운터 변수를 두고 값을 1씩 증가시키며, 사용자의 선택에 따라 카운터가 짝수 또는 홀수일 때 해당 노드의 값을 출력합니다. 만약 첫 번째 노드부터 출력하고 싶다면 짝수 카운터일 때 출력하고, 그렇지 않다면 홀수 카운터일 때 출력하면 됩니다.

아래 코드는 위 알고리즘의 C 언어 구현 예시입니다.

알고리즘

START
    Step 1 -> 구조체 타입의 노드 변수 생성
        int data 선언
        *next를 사용한 node 타입 포인터 선언
    Step 2 -> 함수 void alternate(struct node* head) 선언
        int count = 0 설정
        While (head != NULL) 루프
        IF count % 2 == 0
            head->data 출력
            count++ 설정
            head = head->next 설정
        End
    Step 3 -> 함수 void push(struct node** header, int newdata) 선언
        malloc 함수로 newnode 생성
        newnode->data = newdata 설정
        newnode->next = (*header) 설정
        (*header) = newnode 설정
    Step 4 -> main() 함수 내부
        struct node* head = NULL로 첫 번째 노드를 가리키는 head 생성
        alternate(head) 호출
STOP

C 언어 구현 코드

#include <stdio.h>
#include <stdlib.h>
//노드 구조체 생성
struct node {
    int data;
    struct node* next;
};
//대체 노드를 찾아 출력하는 함수
void alternate(struct node* head) {
    int count = 0;
    while (head != NULL) {
        if (count % 2 == 0)
            printf(" %d ", head->data);
        count++;
        head = head->next;
    }
}
//리스트에 요소를 추가(push)하는 함수
void push(struct node** header, int newdata) {
    struct node* newnode =
    (struct node*)malloc(sizeof(struct node));
    newnode->data = newdata;
    newnode->next = (*header);
    (*header) = newnode;
}
int main() {
    printf("alternate nodes are :");
    struct node* head = NULL;
    push(&head, 1); //push 함수를 호출하여 리스트에 요소 추가
    push(&head, 9);
    push(&head, 10);
    push(&head, 21);
    push(&head, 80);
    alternate(head);
    return 0;
}

출력 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

alternate nodes are : 80 10 1

위 결과에서 볼 수 있듯이, push 함수가 새로운 노드를 항상 리스트의 맨 앞에 추가하기 때문에 입력 순서와는 역순으로 저장되며, 그중 짝수 인덱스(0번째, 2번째, 4번째)에 위치한 노드들인 80, 10, 1이 출력됩니다. 이처럼 반복문과 카운터 변수만으로도 연결 리스트의 대체 노드를 간단하게 출력할 수 있습니다.