[t:/]$ 지식_

링크드 리스트 라이브 코딩

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");

}








[t:/] is not "technology - root". dawnsea, rss