티스토리 뷰
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. 결과
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'C | 자료구조' 카테고리의 다른 글
[C/자료구조] 스택 2개로 큐 구현하기 (0) | 2023.10.29 |
---|---|
[C/자료구조] 후위 계산기 구현하기 (feat. 2자리 수 이상 가능) (0) | 2023.10.29 |
[C/자료구조] 희소행렬의 표현과 덧셈함수 구현하기 (0) | 2023.10.28 |
[C/자료구조] 다항식의 계산 (1) | 2023.10.28 |
[C/자료구조] 순환을 이용해 셀 채우기 (0) | 2023.10.27 |
댓글