링크드 리스트 라이브 코딩

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