Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 캘리그라피
- upper_bound
- multiset
- 성화봉송주자
- 인간이 그리는 무늬
- 평창동계올림픽
- BFS
- 백트레킹
- boj
- Segment Tree
- 창훈쓰다
- 성화봉송
- 삼성 코딩테스트
- 다음 API
- 안드로이드 스튜디오
- 외판원 순회
- 이분탐색
- 위상정렬
- 언어의 온도
- 다음 지도 api
- BOJ 2098
- MST
- 그리디 알고리즘
- 비트마스크
- 다이나믹 프로그래밍
- 생활코딩
- DP
- 영어회화 100일의 기적
- yolo
- lower_bound
Archives
- Today
- Total
Hoon222y
DoublyLinkedList 본문
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 | #include <iostream> using namespace std; struct Node{ int data; char cdata; Node* prev; Node* next; //초기화 Node (int data, char cdata) : data(data) , cdata(cdata){ prev = next = NULL; } // : data(data), cdata(cdata)로 작성하는 이유는 this 안쓰기 위해서 // data에 인자로 입력된 data를 넣어준다는 의미 x로 표현하면 더 쉬울듯 // 아래 초기화 코드와 동일한 기능을 한다. /* Node(int x, char y){ this-> data = x; this->cdata = y; prev = next = NULL; } */ Node() {} }; struct DoublyLinkedList{ int size; Node* head; Node* tail; DoublyLinkedList(){ size=0; head=tail=NULL; } void insert_Head(int data,char cdata){ if(head == NULL) head= tail = new Node(data,cdata); else{ Node *newNode = new Node(data,cdata); newNode->next = head; head->prev = newNode; head = newNode; } size++; } void insert_Tail(int data, char cdata){ if(tail == NULL) head = tail = new Node(data,cdata); else{ Node *newNode = new Node(data,cdata); newNode-> prev = tail; tail-> next = newNode; tail = newNode; } size++; } void delete_Head(){ if(!size){ puts("size is Zero. impossible"); return; } printf("delete head : %d %c\n" , head->data, head->cdata); Node* tempNode = new Node; tempNode = head; head->next->prev = NULL; head = head->next; delete tempNode; size--; } void delete_tail() { if (!size) { puts("불가능합니다."); return; } printf("delete tail : %d, %c\n", tail->data, tail->cdata); Node* tempNode = new Node; tempNode = tail; tail->prev->next = NULL; tail = tail->prev; delete tempNode; size--; } void prinfNode(){ Node* tempNode = new Node; if(!size) puts("노드없음"); else{ tempNode = head; for(int i=1;i<=size;i++){ printf("%d 번째 정보 data : %d , cdata : %c\n" , i,tempNode->data, tempNode->cdata); tempNode = tempNode->next; } } } }; int main(void){ DoublyLinkedList Dll; Dll.insert_Head(100, 'a'); Dll.insert_Head(200,'b'); Dll.insert_Tail(300, 'c'); Dll.insert_Tail(400, 'd'); Dll.prinfNode(); Dll.delete_Head(); Dll.delete_tail(); Dll.prinfNode(); return 0; } | cs |
Delete_head와 Delete_Tail 에서 Node * tempNode = new Node 의 의미는 그냥 인자없는 Node 초기화를 통해서 생성하고 head와 tail의 위치를 저장해두는 임시 저장소 역할이라고 보면 이해하기 편하다.
delete할 때는 순서 잘 생각하면서 하는것이 포인트
Comments