on
[자료구조 - C언어] Linked List(2) - create, insert
[자료구조 - C언어] Linked List(2) - create, insert
사용된 함수
create_node : 동적 메모리를 할당받아 메인 함수에서 입력받은 값을 구조체 멤버 변수(value)에 대입함.
append_node : tail노드에 새로운 노드를 붙이는 역할을 함.
prepend_node : head노드 앞에 새로운 노드를 붙이는 역할을 함.
print_node : 생성된 노드를 출력함.
Create - 노드 생성하기
- 배열을 이용하여 "string"으로 노드 구성하기 -
#include #include typedef struct node { char value; struct node* next_node; }NODE; NODE* create_node(char v) { NODE* mynode; mynode = (NODE*)malloc(sizeof(NODE)); //동적메모리 할당 mynode->value = v; //메인함수에서 값 받기 mynode->next_node = NULL; //기본값으로 NULL 초기화 return mynode; //리턴타입이 void가 아니므로 리턴값이 필요 } void append_node(NODE* h, NODE* n) { struct node *tail; if (h == NULL || n == NULL) return; tail = h; while (h->next_node != NULL) h = h->next_node; h->next_node = n; } void print(NODE* h) { int n = 0; while (1) { printf("index %d : %c
", n++, h->value); if (h->next_node == NULL) break; h = h->next_node; } }
#include #include "Linked01.h" int main(int argc, char* argv[]) { NODE* head; NODE* new_node; int n = 0; head = create_node('s'); //head노드를 's'로 선언 char str[] = "tring"; //배열은 노드를 생성하기 위함 char c; while (str[n] != '\0') { c = str[n]; new_node = create_node(c); //새로운 노드에 배열에 있는 값을 하나씩 넣기 append_node(head, new_node); //head노드와 새로운 노드를 append n++; } print(head); return 0; }
<콘솔창>
"string"을 각 노드에 추가
Insert - 노드 추가하기
1. 생성된 노드 맨 앞에 새로운 노드 추가하기
#include #include typedef struct node { char value; struct node* next_node; }NODE; NODE* create_node(char v) { NODE* mynode; mynode = (NODE*)malloc(sizeof(NODE)); mynode->value = v; mynode->next_node = NULL; return mynode; } void append_node(NODE* h, NODE* n) { struct node *tail; if (h == NULL || n == NULL) return; tail = h; while (h->next_node != NULL) h = h->next_node; h->next_node = n; } NODE* prepend_node(NODE* h, NODE* n) { if (h == NULL || n == NULL) return h; if (n != NULL) { n->next_node = h; //새로운 노드의 다음 노드를 head노드로 설정 } return n; } void print(NODE* h) { int n = 0; while (1) { printf("index %d : %c
", n++, h->value); if (h->next_node == NULL) break; h = h->next_node; } }
#include #include "Linked01.h" int main(int argc, char* argv[]) { NODE* head; NODE* new_node; int n = 0; head = create_node('s'); char str[] = "tring"; char c; while (str[n] != '\0') { c = str[n]; new_node = create_node(c); append_node(head, new_node); n++; } new_node = create_node('x'); head = prepend_node(head, new_node); print(head); return 0; }
<콘솔창>
'x' 새로운 노드 추가
head노드 앞에 새로운 노드 추가
2. 생성된 노드 중간에 새로운 노드 추가하기
#include #include typedef struct node { char value; struct node* next_node; }NODE; NODE* create_node(char v) { NODE* mynode; mynode = (NODE*)malloc(sizeof(NODE)); mynode->value = v; mynode->next_node = NULL; return mynode; } void append_node(NODE* h, NODE* n) { struct node *tail; if (h == NULL || n == NULL) return; tail = h; while (h->next_node != NULL) h = h->next_node; h->next_node = n; } //노드 중간에 새로운 노드 넣기 void insert_node(NODE* h, int a, NODE* n) { if (h == NULL || n == NULL) return; NODE* temp; NODE* now; now = h; if (n != NULL) { for (int i = 0; i < a - 1; i++) { now = now->next_node; //새로운 노드를 넣을 자리로 이동 } temp = now->next_node; now->next_node = n; n->next_node = temp; } } void print(NODE* h) { int n = 0; while (1) { printf("index %d : %c
", n++, h->value); if (h->next_node == NULL) break; h = h->next_node; } }
#include #include "Linked01.h" int main(int argc, char* argv[]) { NODE* head; NODE* new_node; int n = 0; head = create_node('s'); char str[] = "tring"; char c; while (str[n] != '\0') { c = str[n]; new_node = create_node(c); append_node(head, new_node); n++; } new_node = create_node('z'); insert_node(head, 3, new_node); print(head); return 0; }
<콘솔창>
노드 사이에 'z'새로운 노드 추가
노드 사이에 새로운 노드 추가
다음 글에서는 delete_node 함수를 추가하여 Linked List를 설명하겠습니다.
학교에서는 이론으로만 자료구조 수업을 들었는데..
직접 코드를 작성하고, 어떻게 하면 노드끼리 연결될지 생각하는 시간이 가장 중요한 것 같습니다.
감사합니다!
2021.08.22
from http://yjchoi010517.tistory.com/48 by ccl(A) rewrite - 2021-08-23 12:00:31