(C언어) 단일 연결리스트 구현

강민규·2021년 1월 7일
0

연결리스트란

포인터를 통해 연결되어있는 값들

연결리스트 구현에 필요한 기능

  1. 선언 - 구조체 이용
  2. 조회 - 인덱스로 활용 될 구조체를 하나 선언하고 헤드로 초기화한 후 값이 NULL이 나올 떄까지 next로 갱신한다.
  3. 삽입 - 타깃 노드의 다음 노드와 추가할 노드를 연결 시킨 후 타깃 노드를 추가할 노드와 연결시킨다.
  4. 삭제 - 타깃 노드를 타깃 노드 다음 노드의 다음 노드와 연결시키고 타깃 노드 다음 노드를 메모리 해제

키 포인트

  1. 삽입 삭제 시 data가 NULL이면 그냥 함수를 종료해버린다.
  2. 포인터로 선언 시 메모리 할당을 항상 해주도록 하자
  3. 모든 것이 끝나기 전에 동적으로 할당되었던 메모리는 모두 해제해주자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Node{
	struct _Node* next;
	int data;
};

void addFirst(struct Node* target, int data)
{
	if (target == NULL)
		return;

	struct Node* newNode = malloc(sizeof(struct Node));
	if (newNode == NULL)
		return;

	newNode->next = target->next;
	newNode->data = data;

	target->next = newNode;
}

void removeFirst(struct Node* target)
{
	if (target == NULL)
		return;
	struct Node* removedNode = target->next;

	if (removedNode == NULL)
		return;

	target->next = removedNode->next;

	free(removedNode);
}

int main()
{
	struct Node* head = malloc(sizeof(struct Node));

	head->next = NULL;

	addFirst(head, 10);
	addFirst(head, 20);
	addFirst(head, 30);

	removeFirst(head);

	// 조회
	struct Node* curr = head->next;
	while (curr != NULL)
	{
		printf("%d\n", curr->data);
		curr = curr->next;
	}
	// 메모리 해제
	curr = head->next;
	while (curr != NULL)
	{
		struct NODE* next = curr->next;
		free(curr);
		curr = next;
	}

	free(head);

	return 0;
}
profile
새싹 -> 나무

0개의 댓글