일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- 백준
- Docker
- 프로그래밍
- BOJ
- 공룡책
- 리듬게임
- gui
- OS
- C++ library
- a tour of go
- JUCE 튜토리얼
- vim-go
- 연결리스트
- C++
- LOB
- go channel
- C언어
- JUCE
- C++ gui
- JUCE라이브러리
- Nebula
- 자료구조
- 코딩
- C++ gui 라이브러리
- tour of go
- c++ heap
- go
- 운영체제
- JUCE library
Archives
- Today
- Total
CafeM0ca
[자료구조]단일연결리스트(C 반복문) 본문
반응형
학교 과제로 C로 단일연결리스트 짰다.
C++로 구현하면 제네릭 프로그래밍이 가능한데 C는 ... 무안하다. nullptr도 없고 소멸자도없고;
아무튼 링크드리스트의 크기를 명시해주면 삽입,삭제가 수월하다.
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 154 155 156 157 158 | #include <stdio.h> #include <stdlib.h> typedef struct Node { int value; struct Node *next_node; }Node; typedef struct LinkedList { struct Node *head; unsigned int size; }LinkedList; void Insert(struct LinkedList *list,int v); void Remove(struct LinkedList *list,int n); void Print(struct LinkedList *list); void Reserve(struct LinkedList *list); void Search(struct LinkedList *list,int v); void LinkingNode(struct Node *prev,Node *next); // 이전 노드와 다음 노드를 잇는다. void LinkingList(struct LinkedList *list1,struct LinkedList *list2); void FreeLinkedList(struct LinkedList *list); int main() { LinkedList myList = {NULL,0}; Insert(&myList,30); Insert(&myList,20); Insert(&myList,10); Print(&myList); Remove(&myList,1); Print(&myList); LinkedList myList2 = {NULL,0}; Insert(&myList2,80); Insert(&myList2,70); Insert(&myList2,60); Print(&myList2); LinkingList(&myList,&myList2); Print(&myList); Reserve(&myList); Print(&myList); Search(&myList,20); FreeLinkedList(&myList); FreeLinkedList(&myList2); } void LinkingNode(struct Node *prev,struct Node *next) { prev->next_node = next; } void LinkingList(struct LinkedList *list1,struct LinkedList *list2) { Node *linker = list1->head; for(int i=1;i<list1->size;i++) { linker = linker->next_node; } linker->next_node = list2->head; list1->size += list2->size; } void FreeLinkedList(struct LinkedList *list) { Node *cur = list->head; Node *temp; for(int i=0;i<list->size;i++){ temp = cur; cur = cur->next_node; free(temp); } } void Insert(struct LinkedList *list,int v) { if(list->size == 0){ list->head = (Node *)malloc(sizeof(Node)); list->head->value= v; } else{ Node *cur = list->head; for(int i=0;i<list->size-1;i++){ cur = cur->next_node; } cur->next_node = (Node *)malloc(sizeof(Node)); cur->next_node->value = v; } list->size++; } void Remove(struct LinkedList *list,int n) { if(list->size == 0 || list->size < n) return; if(n == 1){ Node *del_node = list->head; list->head = list->head->next_node; free(del_node); list->size--; return; } else if(n == 2){ Node *del_node = list->head->next_node; LinkingNode(list->head,del_node->next_node); free(del_node); list->size--; return; } else{ Node *cur = list->head; for(int i=1;i<n-1;i++) cur = cur->next_node; Node *del_node = cur->next_node; LinkingNode(cur,del_node->next_node); free(del_node); list->size--; } } void Print(struct LinkedList *list) { Node *cur = list->head; for(int i=0;i<list->size;i++){ printf("%d->",cur->value); cur = cur->next_node; } printf("\n"); } void Reserve(struct LinkedList *list) { Node * cur = list->head; int *temp = (int *)malloc(sizeof(temp)*list->size); for(int i=0;i<list->size;i++) { temp[i] = cur->value; cur = cur->next_node; } cur = list->head; for(int i=list->size-1;i>=0;i--) { cur->value = temp[i]; cur = cur->next_node; } free(temp); } void Search(struct LinkedList *list,int v) { Node *cur = list->head; for(int i=0;i<list->size;i++) { if(cur->value == v){ printf("탐색 성공 : %d\n",cur->value); return; } cur = cur->next_node; } printf("탐색 실패\n"); } | cs |
반응형
'Programming > 자료구조|알고리즘' 카테고리의 다른 글
[자료구조]Deque(C++ std::list) (0) | 2018.06.08 |
---|---|
[알고리즘]선택정렬(C++) (0) | 2018.06.02 |
[알고리즘]삽입 정렬(C++) (0) | 2018.03.20 |
[자료구조]단일 연결 리스트(C++ 재귀) (0) | 2017.12.04 |
[C]큐 구현 (0) | 2017.11.16 |
Comments