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
| // LinkedList.c
#include <stdlib.h>
#include <stdio.h>
#include "LinkedList.h"
// 리스트 초기화
void initList(List* plist)
{
plist->head = (Node*)malloc(sizeof(Node));
if (plist->head == NULL)
{
return;
}
plist->head->next = NULL;
plist->current = NULL;
plist->before = NULL;
plist->numberOfData = 0;
}
// 데이터 삽입(추가)
void insertList(List* plist, ListData data)
{
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL)
{
return;
}
newNode->data = data;
newNode->next = plist->head->next;
plist->head->next = newNode;
plist->numberOfData++;
return;
}
// 데이터 조회(첫 번째)
int getFirstListData(List* plist, ListData* pdata)
{
// 데이터가 존재하지 않는다면...
if (plist->head->next == NULL)
{
return FALSE;
}
// 첫 번째 데이터를 가리킨다.
plist->current = plist->head->next;
// current의 이전 노드를 가리킨다. 여기서는 더미 노드를 의미한다.
plist->before = plist->head;
// 데이터 전달
*pdata = plist->current->data;
return TRUE;
}
// 데이터 조회(두 번째 이후)
int getNextListData(List* plist, ListData* pdata)
{
// 데이터가 존재하지 않는다면...
if (plist->current->next == NULL)
{
return FALSE;
}
// 이전 노드는 현재 노드를 가리킨다.
plist->before = plist->current;
// 현재 노드는 다음 노드를 가리킨다.
plist->current = plist->current->next;
// 데이터 전달
*pdata = plist->current->data;
return TRUE;
}
// 데이터 삭제
ListData removeListData(List* plist)
{
// 삭제할 노드가 현재 노드를 가리키게 한다.
Node* delNode = plist->current;
// 데이터를 임시로 저장한다.
ListData rdata = delNode->data;
// 노드의 연결 조정한다.
plist->before->next = plist->current->next;
// 현재 노드가 이전 노드를 가리키게 한다.
plist->current = plist->before;
// 노드 삭제
free(delNode);
plist->numberOfData--;
return rdata;
}
// 추가적인 함수
int getListLength(List* plist)
{
return plist->numberOfData;
}
|