연결리스트 동적할당 알려주세요
조회수 364회
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); // 메모리 반환
}
}
댓글 입력