-
Notifications
You must be signed in to change notification settings - Fork 0
/
구조체 포인터-양방향 링크드 리스트 예제
110 lines (96 loc) · 2.76 KB
/
구조체 포인터-양방향 링크드 리스트 예제
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
//구조체 포인터-양방향 링크드 리스트 예제
#include<stdio.h>
#include<stdlib.h>
typedef struct 노드_ {
struct 노드_* 전노드;
int 값;
struct 노드_* 다음노드;
}노드;
typedef struct 리스트_ {
노드 머리;
노드 꼬리;
unsigned int 길이 = 0;
}리스트;
리스트* 생성하다() {
리스트 *p리스트 = (리스트*)malloc(sizeof(리스트));
p리스트->머리.다음노드 = &(p리스트->꼬리);
p리스트->꼬리.전노드 = &(p리스트->머리);
p리스트->길이 = 0;
return p리스트;
}
void 소멸시키다(리스트* p리스트) {
노드 *p현노드 = p리스트->머리.다음노드;
while (p현노드 != &(p리스트->꼬리)) {
노드 *p삭제노드 = p현노드;
p현노드 = p현노드->다음노드;
free(p삭제노드);
}
free(p리스트);
}
void 추가하다(리스트* p리스트, int 값) {
노드 *p마지막노드 = p리스트->꼬리.전노드;
노드 *p새노드 = (노드 *)malloc(sizeof(노드));
p새노드->값 = 값;
p마지막노드->다음노드 = p새노드;
p새노드->전노드 = p마지막노드;
p리스트->꼬리.전노드 = p새노드;
p새노드->다음노드 = &(p리스트->꼬리);
(p리스트->길이)++;
}
unsigned int 길이얻다(리스트* p리스트) {
/*
int 길이 = 0;
노드*현재노드 = 머리.다음노드;
while (현재노드!= &꼬리) {
길이++;
현재노드 = 현재노드->다음노드;
}
*/
return p리스트->길이;
}
int 주다(리스트* p리스트, int 위치) {
int 현위치 = 0;
노드 *현재노드 = p리스트->머리.다음노드;
while (현위치<위치){
현위치++;
현재노드 = 현재노드->다음노드;
}
return 현재노드->값;
}
void 삭제하다(리스트* p리스트, int 위치) {
int 현위치 = 0;
노드 *p삭제노드 = p리스트->머리.다음노드;
while (현위치<위치) {
현위치++;
p삭제노드 = p삭제노드->다음노드;
}
p삭제노드->전노드->다음노드 = p삭제노드->다음노드;
p삭제노드->다음노드->전노드 = p삭제노드->전노드;
free(p삭제노드);
(p리스트->길이)--;
}
void main() {
리스트* p리스트1 = 생성하다();
추가하다(p리스트1, 1);
추가하다(p리스트1, 2);
추가하다(p리스트1, 3);
추가하다(p리스트1, 4);
int i = 0;
for (i = 0; i < 길이얻다(p리스트1); i++) {
int 값 = 주다(p리스트1, i);
printf("%d \n", 값);
}
리스트* p리스트2 = 생성하다();
추가하다(p리스트2, 11);
추가하다(p리스트2, 12);
추가하다(p리스트2, 13);
추가하다(p리스트2, 14);
int j = 0;
for (j = 0; j < 길이얻다(p리스트2); j++) {
int 값 = 주다(p리스트2, j);
printf("%d \n", 값);
}
소멸시키다(p리스트1);
소멸시키다(p리스트2);
getchar();
}