링크드 리스트 라이브 코딩
2018/02/20
http://likejazz.com/post/170886684860/%EB%A9%B4%EC%A0%91%EC%8B%9C-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EB%AC%BC%EC%96%B4%EB%B3%B4%EA%B3%A0-%EB%88%88-%EB%B0%98%EC%A7%9D%EA%B1%B0%EB%A6%AC%EB%A9%B4-%EC%A6%89%EC%84%9D%EC%97%90%EC%84%9C-%EB%A7%81%ED%81%AC%EB%93%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A7%9C%EB%B3%B4%EB%9D%BC%EA%B3%A0-%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4
링크드리스트 짜기 라이브?코딩. 인터넷 안 보구 짜기. 사실은 한 번에 녹화한건 아니고 중간에 버벅거림이 한 번 있어서 다시 녹화했다..
이 글을 보고 문득 생각나서 해본 것이다. 나도 사실 패턴 같은 것 잘 모른다. 넘의 좋은 소스 나쁜 소스 보면서 짬통으로 체득한 것에 훗날 이름이 있었다는 것을 알게 된 것이 많다.
https://www.facebook.com/dawnsea0419/videos/10214011596776757/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node_t {
int key;
int value;
} my_data_t;
typedef struct list_t {
struct node_t my_data;
struct list_t *next;
} my_list_t;
my_list_t *head = NULL;
my_list_t *find(int key)
{
my_list_t *p;
if (!head) {
return NULL;
}
p = head;
while (p) {
if (p->my_data.key == key) {
return p;
}
p = p->next;
};
return NULL;
}
void insert(int key, int value)
{
my_list_t *n, *p;
p = find(key);
if (p) {
p->my_data.value = value;
return;
}
n = (my_list_t *)malloc(sizeof(my_list_t));
// 에러는 나몰랑.
n->my_data.key = key;
n->my_data.value = value;
n->next = NULL;
if (!head) {
head = n;
return;
}
p = head;
while (p->next) {
p = p->next;
}
p->next = n;
}
void dump_all(void)
{
my_list_t *p;
p = head;
while (p) {
printf("k = %d, v = %d\n", p->my_data.key, p->my_data.value);
p = p->next;
};
}
void delete(int key)
{
my_list_t *p, *p2;
if (!head) {
return;
}
p = head;
if (p->my_data.key == key) {
head = p->next;
free(p);
return;
}
while (p->next) {
if (p->next->my_data.key == key) {
p2 = p->next->next;
free(p->next);
p->next = p2;
return;
}
p = p->next;
};
return;
}
int main()
{
my_list_t *tt;
printf("hell world!\n");
insert(100, 200);
insert(100, 500);
insert(101, 300);
insert(102, 300);
insert(103, 300);
insert(101, 700);
insert(104, 300);
insert(104, 301);
dump_all();
tt = find(104);
if (!tt)
printf("없다\n");
else
printf("find : k = %d, v = %d\n", tt->my_data.key, tt->my_data.value);
delete(103);
dump_all();
delete(104);
delete(100);
delete(101);
delete(102);
dump_all();
tt = find(104);
if (!tt)
printf("없다\n");
else
printf("find : k = %d, v = %d\n", tt->my_data.key, tt->my_data.value);
printf("끝났다\n");
}