반응형
//******************************************************* // 이중 연결 리스트 //******************************************************* // - head , tail #include#include //******************************************************* struct Node { int data; Node * prev; // 앞의 노드를 가르키는 포인터 Node * next; // 뒤의 노드를 가리키는 포인터 }; //******************************************************* Node * head = NULL; Node * tail = NULL; //******************************************************* Node * Begin(){ return head->next;} Node * End(){ return tail->prev; } //******************************************************* // Utility 함수 !! //******************************************************* Node * CreateNode( int data) { Node * NewNode = (Node*)malloc(sizeof(Node)); NewNode->data = data; NewNode->prev = NULL; NewNode->next = NULL; return NewNode; } //******************************************************* // InitList : head, tail 노드 초기화 !! //******************************************************* void InitList() { head = CreateNode(0); tail = CreateNode(0); head->next = tail; head->prev = head; tail->next = tail; tail->prev = head; } //******************************************************* // Insert( Node * first , Node * last , int data) // : first포인터와 ㅣlast포인터 사이에 data를 넣어라 !! //******************************************************* void Insert( Node * first , Node * last , int data ) { // 노드 생성 Node * NewNode = CreateNode(data); //링크 연결 !! NewNode->next = last; NewNode->prev = first; first->next = NewNode; last->prev = NewNode; } //******************************************************* void push_back(int data) { Insert( End(), tail , data); } //******************************************************* void push_front( int data ) { Insert( head, Begin(), data); } //******************************************************* //******************************************************* Node * find( int data) { Node * p = head->next; while( p != tail) { if( p->data == data) { return p; } else { p = p->next; } } return NULL; } //******************************************************* void show() { Node * p = head->next; while( p != tail) { printf("%d--", p->data); p = p->next; } puts(""); } //******************************************************* // erase( Node * where); 해당 노드를 삭제한다 !! //******************************************************* void erase( Node * Where ) { Where->prev->next = Where->next; Where->next->prev = Where->prev; free(Where); } void erase( int data ) { erase( find(data)) ; } void pop_back() { erase( End()); } void pop_front() { erase( Begin()); }
'자료구조' 카테고리의 다른 글
[자료구조] List class (0) | 2014.12.01 |
---|---|
[자료구조] 연결 리스트 (0) | 2014.12.01 |
[자료구조] 단일 연결리스트 (0) | 2014.12.01 |
[자료구조] vector (0) | 2014.12.01 |
[자료구조] stack (0) | 2014.12.01 |