프로그래밍/C++
C++ 실습 - 링크드리스트
게으른구름
2018. 2. 12. 03:09
< 링크드리스트 (Linked list) >
동적할당을 이용해 자료를 저장할 공간이 필요할 때마다 메모리를 할당하는 데이터 관리법입니다.
'노드'를 연결해 목록을 만드는 방식인데, 시작 노드를 안다면 중간 노드들을 거쳐 종료 노드까지 탐색할 수 있습니다.
노드의 특징으로 다음 노드와 연결점을 가지고 있다는 점이 그것을 가능하게 만듭니다.
장점 : 노드 개수의 제한이 없다.
단점 : 특정 데이터에 바로 접근 불가 (<-> 배열은 인덱스로 접근 가능)
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 | #include <iostream> #include <string> using namespace std; int i; // 구조체 typedef struct Student { string name; Student *next = NULL; // 다음 노드의 주소 저장 초기값은 NULL } S; S *head = new S; void add_node(string name) { S *temp = head; while (temp->next != NULL) { temp = temp->next; } S *node = new S; node->name = name; temp->next = node; } void del_node(string name) { S *temp = head; while (temp->next->name != name) { if ((temp = temp->next) == NULL) { // 일치하는 노드가 없다면 함수 종료 return; } } S *node_del = temp->next; temp->next = temp->next->next; delete node_del; } S *find_node(string name) { S *temp = head; while (temp->next->name != name) { if ((temp = temp->next) == NULL) { // 일치하는 노드가 없다면 함수 종료 return NULL; } } return temp->next; } void print_list() { S *temp = head; for (i = 1; temp->next != NULL; i++) { cout << i << " : " << temp->next->name << endl; temp = temp->next; } } int main() { string name; cout << "< 추가할 이름 입력 > (입력 종료는 0)" << endl; while (name != "0") { cout << "이름 : "; cin >> name; add_node(name); } print_list(); name = ""; cout << "< 제거할 이름 입력 > (입력 종료는 0)" << endl; while (name != "0") { cout << "이름 : "; cin >> name; del_node(name); } print_list(); return 0; } | cs |