자료구조는 크게 선형과 비선형으로 나뉩니다.
연결 리스트는 데이터와 주소(Link)를 담은 노드들의 연결로 이루어집니다.
struct listNode {
char data[4];
struct listNode* link;
};
typedef struct {
listNode* head;
} linkedList_h;
#pragma once
typedef struct ListNode {
char data[4];
struct ListNode* link;
} listNode;
typedef struct {
listNode* head;
} linkedList_h;
linkedList_h* createLinkedList_h(void);
void freeLinkedList_h(linkedList_h* L);
void printList(linkedList_h* L);
void insertFirstNode(linkedList_h* L, char* x);
void insertMiddleNode(linkedList_h* L, listNode* pre, char* x);
void insertLastNode(linkedList_h* L, char* x);
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "InsertLinkedList.h"
// 리스트 생성
linkedList_h* createLinkedList_h(void) {
linkedList_h* L;
L = (linkedList_h*)malloc(sizeof(linkedList_h));
L->head = NULL;
return L;
}
// 메모리 해제
void freeLinkedList_h(linkedList_h* L) {
listNode* p;
while (L->head != NULL) {
p = L->head;
L->head = L->head->link;
free(p);
p = NULL;
}
}
// 리스트 출력
void printList(linkedList_h* L) {
listNode* p;
printf("L = (");
p = L->head;
while (p != NULL) {
printf("%s", p->data);
p = p->link;
if (p != NULL) printf(", ");
}
printf(") \n");
}
// 첫 번째 노드로 삽입
void insertFirstNode(linkedList_h* L, char* x) {
listNode* newNode;
newNode = (listNode*)malloc(sizeof(listNode));
strcpy(newNode->data, x);
newNode->link = L->head;
L->head = newNode;
}
// 중간 삽입 (pre 노드 뒤)
void insertMiddleNode(linkedList_h* L, listNode* pre, char* x) {
listNode* newNode;
newNode = (listNode*)malloc(sizeof(listNode));
strcpy(newNode->data, x);
if (L->head == NULL) {
newNode->link = NULL;
L->head = newNode;
}
else if (pre == NULL) {
newNode->link = L->head;
L->head = newNode;
}
else {
newNode->link = pre->link;
pre->link = newNode;
}
}
// 마지막 노드로 삽입
void insertLastNode(linkedList_h* L, char* x) {
listNode* newNode;
listNode* temp;
newNode = (listNode*)malloc(sizeof(listNode));
strcpy(newNode->data, x);
newNode->link = NULL;
if (L->head == NULL) {
L->head = newNode;
return;
}
temp = L->head;
while (temp->link != NULL) temp = temp->link;
temp->link = newNode;
}
#include <stdio.h>
#include "InsertLinkedList.h"
int main(void) {
linkedList_h* L;
L = createLinkedList_h();
printf("(1) 공백 리스트 생성하기! \n");
printList(L);
printf("\n(2) 리스트에 [수] 노드 삽입하기! \n");
insertFirstNode(L, "수");
printList(L);
printf("\n(3) 리스트 마지막에 [금] 노드 삽입하기! \n");
insertLastNode(L, "금");
printList(L);
printf("\n(4) 리스트 첫 번째에 [월] 노드 삽입하기! \n");
insertFirstNode(L, "월");
printList(L);
printf("\n(5) 리스트 공간을 해제하여 공백 리스트로 만들기! \n");
freeLinkedList_h(L);
printList(L);
return 0;
}