재미삼아 만들어본 Double Linked List (이중 연결 리스트)
역시 이론으로 알고있는 것과 실제로 경험해보는 것은 큰 차이가 있다는 것을 실감. 구현하는 것은 어렵지 않았으나, 사소한 것 하나하나에 대한 궁금증이 태어남. 대표적인 것이 "Double pointer(다중 포인터)를 왜 사용하는가?"의 질문. 이에 대한 답은 지역변수의 특징과 관련이 있다는 것을 파악. 지역변수는 함수가 리턴하는 순간 함수와 함께 사라진다는 특징이 있음. 함수에 전달하는 매개변수가 포인터라 하더라도 결국은 지역변수와 비슷한 성격을 보임. 포인터 매개변수는 주소를 전달받아 그것을 가리키는 포인터로 이용한다는 특징이 있을뿐 이외에 것은 일반 변수와 같음. 잡설을 그만두고 코드를 까보자. 코드는 리스트와 테스트로 구분되있다. <이중 연결 리스트> -- list.h -- #define true 1 #define false -1 typedef struct _node { int data; struct _node* prev; struct _node* next; } node; typedef struct d_linked_list { node* head; node* tail; int count; int sorted; } d_linked_list; void del_list(d_linked_list* _list); void ins_data(int _data, d_linked_list** _list); node* search_data(int _data, d_linked_list* _list); int del_data(int _data, d_linked_list* _list); void show_all(d_linked_list* _list); -- list.c -- #include #include #include "list.h" void init_list(int _data, d_linked_list** _list) { ...