티스토리 뷰

 

C언어를 이용한 자료구조 실습입니다.

 


 

I. 문제

 

정수를 포함한 노드들로 구성된 연결 리스트를 구성하고, 이 리스트에 포함된 수를 출력하는 프로그램을 다음과 같이 작성하라. 연결리스트에 포함된 노드의 구조 타입은 다음과 같이 정의된다.

 

typedef struct list {
	int val;
	struct list* next;
} list;

 

1. 한 개의  list 타입의 노드를 동적 생성하고, val 필드는 난수(1~100의 범위)를 발생시켜 초기화하고, next 필드는 NULL로 초기화한 후에,  그 노드의 포인터를 반환하는 get_node()를 작성하라.

 

2. list 타입의 노드를 사용자가 원하는 개수만큼 생성하여(get_node()를 이용할 것) 다음과 같은 연결 리스트로 구성하여 첫번째 노드의 포인터를 반환하는 make_list()를 작성하라.

 

3. 위에서 구성된 연결리스트의 첫번째 노드의 포인터를 전달받아서 리스트에 포함된 모든 노드의 val 값을 출력하는 display()를 작성하라.

 

4. 위의 함수들을 이용하여 문제를 해결하는 C 프로그램을 작성하고, 테스트하라.

 

 

II. 구현

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

// 노드 구조체 정의
typedef struct list {
	int val;
	struct list* next;
} list;

// 1. 동적할당을 이용해 노드 생성
struct list* get_node() {
	struct list* node = (struct list*)malloc(sizeof(struct list));
	node->val = rand() % 100 + 1;
	node->next = NULL;

	return node; // 노드포인터 반환
}

// 2. 사용자로부터 노드의 개수를 입력받고 p와 노드들을 연결
struct list* make_list(int input) {

	list* p = (struct list*)malloc(sizeof(struct list)); // 포인터 p생성
	p = get_node();

	//노드 생성 및 연결
	for (int i = 1; i < input; i++) {
		list* node = get_node(); // get_node사용
		node->next = p->next;	 // NULL할당
		p->next = node;			 // 다음 노드에 앞 노드의 주소 저장
	}
	return p;
}

// 출력
void display(list* p) {
	while (p->next != NULL) {
		printf("node: %3d\n", p->val); 
		p = p->next;
	}
	printf("node: %3d\n", p->val);
}

int main()
{
	int input;
	srand(time(NULL));  // 시드 부여

	printf("노드의 개수를 입력해주세요 : ");
	scanf("%d", &input);
	display(make_list(input));

	return 0;
}

 

III. 결과


공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday