편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2022.12.04

    연결리스트 동적할당 알려주세요


    n개의 양의 정수가 주어졌을 때 이들의 공약수를 구하고 이 공약수들을 연결 리스트에 저장하는 프로그램을 작성하시오.

    • n개의 양의 정수는 text file에 저장한 후 이 파일로부터 읽어 정수형 배열변수에 저장하시오.
    • 공약수들은 배열변수에 저장하지 말고 반드시 연결리스트의 노트에 저장하시오. 즉, 노드 하나에 공약수 한 개를 저장
    • 연결리스트에 저장된 공약수들을 화면에 출력하시오.
    • 동적할당된 노드들을 해제하시오.

    해당 문제를 어떻게 풀어야하나요? 저는 이렇게 풀어봤는데 작동이 올바르게 되지 않습니다. 어느 부분을 어떻게 수정해야 하는지 알려주시면 감사하겠습니다!

    #pragma warning(disable :4996)
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct LinkedList {
        int data;
        struct LinkedList* next;
    }LinkedList;
    
    struct LinkedList* head = NULL;
    struct LinkedList* tail = NULL;
    struct LinkedList* cur = NULL;
    
    int main() {
        int a, b;
        int* ary;
        LinkedList* cur;
        int cnt = 0;
    
        ary = (int*)malloc(sizeof(int));
    
        FILE* fp = fopen("text.txt","r");
    
        if (fp != NULL) // 파일이 정상적으로 열렸을 때 if문실행
        {
            fscanf(fp, "%d", &a); // "data.txt"파일의 첫번째 값을 입력받아서
            ary = (int*)malloc(sizeof(int) * a); // 첫번째 값만큼 동적으로 정수형 배열을 만듬
            for (b = 0; b < a; b++) // 배열의 크기만큼 값을 입력 받음
            {
                fscanf(fp, "%d", &ary[b]);
            }
            fclose(fp); // 입력을 받은뒤에 파일닫기
    
            int min = 0;
    
            for (b = 0; b < a; b++) {
                if (ary[b] > min) {
                    min = ary[b];
                }
            }
            for (b = 0; b < min; b++) {
                for (int j = 0; j < sizeof(ary); j++) {
                    if (ary[j] % b == 0) {
                        cur = (LinkedList*)malloc(sizeof(LinkedList));
                        cur->data = j;
                        cur->next = NULL;
                        if (head == NULL)
                            head = tail = cur;
                        else {
                            tail->next = cur;
                            tail = cur;
                        }
                    }
                    tail = head;
                    while (tail != NULL) {
                        printf("%d", tail->data);
                        tail = tail->next;
                    }
                    printf("\n");
                }
            }
            free(ary); // 메모리 반환
        }
    }
    
  • 프로필 squirtleovo12@gmail.com님의 편집
    날짜2022.12.03

    동적할당 알려주세요ㅠㅠㅠㅠㅠㅠ


    n개의 양의 정수가 주어졌을 때 이들의 공약수를 구하고 이 공약수들을 연결 리스트에 저장하는 프로그램을 작성하시오.

    *n개의 양의 정수는 text file에 저장한 후 이 파일로부터 읽어 정수형 배열변수에 저장하시오. *공약수들은 배열변수에 저장하지 말고 반드시 연결리스트의 노트에 저장하시오. 즉, 노드 하나에 공약수 한 개를 저장 *연결리스트에 저장된 공약수들을 화면에 출력하시오. *동적할당된 노드들을 해제하시오.

    해당 문제를 어떻게 풀어야하나요? 저는 이렇게 풀어봤는데 작동이 올바르게 되지 않습니다. 어느 부분을 어떻게 수정해야 하는지 알려주시면 감사하겠습니다!!!

    pragma warning(disable :4996)

    include

    include

    typedef struct LinkedList { int data; struct LinkedList* next; }LinkedList;

    struct LinkedList* head = NULL; struct LinkedList* tail = NULL; struct LinkedList* cur = NULL;

    int main() { int a, b; int* ary; LinkedList* cur; int cnt = 0;

    ary = (int*)malloc(sizeof(int));
    
    FILE* fp = fopen("text.txt","r");
    
    if (fp != NULL) // 파일이 정상적으로 열렸을 때 if문실행
    {
        fscanf(fp, "%d", &a); // "data.txt"파일의 첫번째 값을 입력받아서
        ary = (int*)malloc(sizeof(int) * a); // 첫번째 값만큼 동적으로 정수형 배열을 만듬
        for (b = 0; b < a; b++) // 배열의 크기만큼 값을 입력 받음
        {
            fscanf(fp, "%d", &ary[b]);
        }
        fclose(fp); // 입력을 받은뒤에 파일닫기
    
        int min = 0;
    
        for (b = 0; b < a; b++) {
            if (ary[b] > min) {
                min = ary[b];
            }
        }
        for (b = 0; b < min; b++) {
            for (int j = 0; j < sizeof(ary); j++) {
                if (ary[j] % b == 0) {
                    cur = (LinkedList*)malloc(sizeof(LinkedList));
                    cur->data = j;
                    cur->next = NULL;
                    if (head == NULL)
                        head = tail = cur;
                    else {
                        tail->next = cur;
                        tail = cur;
                    }
                }
                tail = head;
                while (tail != NULL) {
                    printf("%d", tail->data);
                    tail = tail->next;
                }
                printf("\n");
            }
        }
        free(ary); // 메모리 반환
    }
    

    }