CS/자료구조

리스트

코딩하는 포메라니안 2021. 7. 8. 21:13

1. 배열을 이용한 리스트

#include <stdio.h>

int main() {
	int arr[10];
	int n, index = 0;

	//입력
	while (index<10) {
		printf("자연수 입력 : ");
		scanf("%d", &n);
		arr[index++] = n;
	}

	//출력
	for (int i = 0; i < index; i++) {
		printf("%d ", arr[i]);
	}

	return 0;
}

 

2. 포인터를 이용한 리스트 = Linked List

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

typedef struct node {
	int data;
	struct node* next;
}Node;

int main() {
	Node* head = NULL; //배열 시작
	Node* tail = NULL; //배열 끝
	Node *current = NULL; //현재 위치

	//입력 = 새로운 노드 연결
	Node* newNode = NULL;
	int n;
	while (1) {
		printf("자연수 입력 : ");
		scanf("%d", &n);
		if (n < 1)
			break;

		newNode = (Node*)malloc(sizeof(Node));
		newNode->data = n;
		newNode->next = NULL;

		if (head == NULL)
			head = newNode;
		else
			tail->next = newNode;
		tail = newNode;
	}
	printf("\n");

	//출력
	if (head == NULL)
		printf("list에 데이터가 없습니다.");
	else {
		current = head;
		printf("%d ", current->data);
		while (current->next != NULL) {
			current = current->next;
			printf("%d ", current->data);
		}
	}
	printf("\n\n");

	//메모리 해제
	if (head == NULL)
		return 0;
	else {
		Node* delNode = head;
		Node* delNextNode = head->next;

		free(delNode);

		while (delNextNode != NULL) {
			delNode = delNextNode;
			delNextNode = delNextNode->next;

			free(delNode);
		}
	}
	return 0;
}

 

'CS > 자료구조' 카테고리의 다른 글

정렬(Sorting)  (0) 2021.07.13
우선순위 큐(Priority Queue)  (0) 2021.07.11
트리(Tree)  (0) 2021.07.11
스택(Stack) & 큐(Queue)  (0) 2021.07.10
재귀함수  (0) 2021.07.08