Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 오류
- Linux
- C
- C++
- Numpy
- Python
- 핑거스타일
- paramiko
- VS Code
- ubuntu
- 기타 연주
- 채보
- JSON
- pytorch
- YOLO
- LIST
- OpenCV
- windows forms
- pip
- pandas
- Visual Studio
- 프로그래머스
- C#
- Docker
- 명령어
- error
- mysql
- label
- SSH
- Selenium
Archives
- Today
- Total
기계는 거짓말하지 않는다
링크드 리스트(Linked List) 본문
#include <stdio.h>
#include <stdlib.h>
typedef enum eSelectMenu {
selectAdd = 1,
selectDelete,
selectPrint,
selectExit
} eSelectMenu;
typedef enum eBool {
false,
true
} eBool;
typedef struct Node {
int data;
struct Node* link;
} Node;
void PrintLinkedList(Node* head) {
if (head == NULL) {
printf("List Empty");
return;
}
for (; head != NULL; head = head->link) {
printf("%d ", head->data);
}
}
void AddLinkedListData(Node** head, Node** tail, int data) {
Node* temp = (Node*)malloc(sizeof(Node));
if (temp == NULL) {
fprintf(stderr, "Memory allocation failure\n\n");
return;
}
temp->data = data;
temp->link = NULL;
if (*head == NULL) {
*head = temp;
*tail = *head;
}
else {
(*tail)->link = temp;
*tail = temp;
}
}
void DeleteLinkedListData(Node** head, int data) {
if (*head == NULL) {
printf("List Empty\n");
return;
}
eBool deleteCheck = false;
Node* tempHead, *tempNode;
tempHead = *head;
if ((*head)->data == data) { // deleteData == head data
*head = (*head)->link;
free(tempHead);
deleteCheck = true;
}
else {
for (; tempHead->link != NULL; tempHead = tempHead->link) {
if (tempHead->link->data == data) {
tempNode = tempHead->link;
tempHead->link = tempHead->link->link;
free(tempNode);
deleteCheck = true;
break;
}
}
}
if (deleteCheck == false) printf("No such element\n");
else printf("Delete complete\n");
}
int main(void) {
eSelectMenu select;
Node* head, *tail;
int data;
head = NULL;
tail = NULL;
while (1) {
printf("1. add / 2. delete / 3. print / 4. exit\n");
printf("select: ");
scanf_s("%d", &select);
switch (select) {
case selectAdd:
printf("data: ");
scanf_s("%d", &data);
AddLinkedListData(&head, &tail, data);
printf("\n");
break;
case selectDelete:
printf("delete data: ");
scanf_s("%d", &data);
DeleteLinkedListData(&head, data);
printf("\n");
break;
case selectPrint:
PrintLinkedList(head);
printf("\n\n");
break;
case selectExit:
printf("Exit Program\n");
return 0;
default:
printf("re\n\n");
}
while (getchar() != '\n') {}
}
}
가장 뒤에 데이터가 계속 붙는 간단한 링크드 리스트 예. 다방면으로 응용 가능
'C' 카테고리의 다른 글
free 함수의 할당된 메모리 크기 판별 (0) | 2021.05.10 |
---|---|
이중 연결 리스트(Doubly Linked List) (0) | 2021.04.25 |
원형 큐(Circular Queue) (0) | 2020.12.09 |
스택(Stack) (0) | 2020.12.09 |
Short Circuit Evaluation(SCE, 단축 평가) (0) | 2020.12.06 |
Comments