⭐ Linked List ⭐
Linked List를 이해를 하기 위해 제일 먼저, linked list를 그려보도록 하자.
CURD (Create Update Read Delete)
insert
#include <stdio.h>
#include <assert.h>
#include "list.h"
void insert(struct node **phead, int data)
{
struct node *newnode;
newnode = MALLOC(struct node);
if (newnode == NULL) {
printf("메모리가 부족하여 자료 %d를 삽입할 수 없습니다.\\n", data);
return;
}
newnode->data = data;
newnode->next = *phead;
*phead = newnode;
}
delete_first
int delete_first(struct node **phead)
{
int data;
struct node *tmpnode;
assert(*phead != NULL); /* 비어 있지 않은 연결 리스트 인지 확인 */
tmpnode = *phead;
data = tmpnode->data; /* 반환할 자료 저장 */
*phead = tmpnode->next; /* 헤드 노드 변경 */
free(tmpnode); /* 삭제되는 첫 번째 노드 공간 반납 */
return data; /* 자료 반환 */
}
insert_order
/* 자료 data를 연결 리스트에 오름차순으로 삽입 */
void insert_order(struct node **phead, int data)
{
struct node *p, *newnode;
p = *phead; /* 헤드 노드 */
if (p == NULL || data < p->data) {
insert(phead, data); return;
}
newnode = MALLOC(struct node);
if (newnode == NULL) {
printf("메모리가 부족하여 자료 %d를 삽입할 수 없습니다.\\n", data);
return;
}
newnode->data = data;
while (p->next != NULL) { /* 자료가 삽입될 위치를 찾음 */
if (data < p->next->data) break;
p = p->next;
}
newnode->next = p->next; /* 노드 p 다음에 삽입 */
p->next = newnode;
}
print_list
/* 연결 리스트의 모든 자료를 순서대로 출력 */
void print_list(struct node *head) {
struct node *p;
p = head;
while (p != NULL) {
printf("%6d",p->data);
p = p->next; }
printf("\\n");
}