반응형
체인 노드를 이용한 연결 리스트 자료구조입니다.
삭제 과정을 따로 구현해두지 않았습니다.
이 코드를 보고 생성, 삽입, 출력을 이해하시고 삭제를 구현해보시면
체인 노드에 대해 이해를 할 수 있을거라 확신합니다.
삭제 코드가 너무 어렵고 알고싶다면 댓글에 메일 주소를 알려주세요.
코드는 보고 이해하는것과 직접 해보는 것은 천지차이이고,
코드를 보고 이해하였다고해서 자신이 직접 제작 할 수 있는 코드가 아님을 주의하시기 바랍니다.
이 습관이 잘못된다면 당신은 자신만의 코드를 만들기 어려워집니다.
혼자 힘들어하고 고민해가며 얻어가는 코드가 당신의 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | #include <iostream> using namespace std; class ChainNode { friend class Chain; private: int data; ChainNode *link; public: ChainNode(int value = 0, ChainNode *_link = NULL) { data = value; link = _link; } }; class Chain { private: ChainNode *first; ChainNode *second; public: Chain(); void makeChainNode(int value); int insertChainNode(int value, int pos); void print(); }; Chain::Chain() // 생성자 { first = NULL; second = NULL; } void Chain::makeChainNode(int value) { if (first == NULL) { second = new ChainNode(0, NULL); // 체인노드 다음 것을 0,0으로 초기화 first = new ChainNode(value, second); // 첫 체인노드는 value값 대입, second로 link } else { ChainNode *tmp; second->data = value; tmp = new ChainNode(0,NULL); // 새 노드는 값만 가지고 링크는 NULL second->link = tmp; // 이전에 가리키던 second의 link가 새로 생긴 second의 link 가리키도록 second = tmp; } } int Chain::insertChainNode(int value, int pos) { ChainNode *cur = first; ChainNode *tmp; int count = 0; while (cur->link != NULL) // 총 개수 확인 { cur = cur->link; count++; } cur = first; if (count < pos) { cout << "노드가 존재하지 않습니다." << endl; return 0; } else if (count == pos) { cout << "<< 1. 노드 생성 >> 을 이용해 주세요" << endl; return 0; } for (int i = 1; i < pos; i++) { cur = cur->link; } tmp = new ChainNode(value, cur->link); cur->link = tmp; return 1; } void Chain::print() { ChainNode *cur = first; while (cur->link != NULL) { cout << cur->data << " "; cur = cur->link; } cout << endl; } int main() { Chain a; int value; int num; int pos; cout << "------------ Chain Node Program ------------" << endl; while(1) { cout << "1. 노드 생성 2. 노드 삽입 3. 노드 확인 4. 노드 삭제 5. 종료" << endl; cout << "번호 입력 :: "; cin >> num; switch(num) { case 1: cout << "노드 값 입력 :: "; cin >> value; a.makeChainNode(value); break; case 2: cout << "몇 번째 노드 다음 삽입? :: "; cin >> pos; cout << "노드 값 입력 :: "; cin >> value; a.insertChainNode(value,pos); break; case 3: a.print(); break; case 4: /* * 삭제 과정은 이 코드를 사용하는 사용자 몫 * 삭제 구현 :: 마지막 노드부터 삭제, 첫 노드부터 삭제, 특정 노드 삭제 */ break; case 5: return 0; break; } } } // This source code Copyright is Crocus // Do you want to see more contents? click here >> |
반응형
'Applied > 자료구조' 카테고리의 다른 글
스레드 이진 트리(Thread Binary Tree) 개념 (1) (7) | 2016.06.21 |
---|---|
자료구조를 공부하는 분들에게 (2) | 2016.06.11 |
이중 연결 리스트(Double Linked List) - Class 이용 (0) | 2016.06.04 |
이진 트리 소스 코드 (삽입, 삭제, 탐색, 순회) (2) | 2016.05.31 |
이진 트리 소스 코드 (순회) (0) | 2016.05.23 |