1
/**//*
2
이중 연결 리스트(Doubly Linked List) :
3
선형 리스트는 역방향 조회를 할 수 없는 단점이 있다.
4
이를 개선한 데이터 구조가 이중 연결 리스트이다.
5
*/
6
#include <stdio.h>
7
#include <malloc.h>
8
#include <string.h>
9
10
// 이중 연결 링크드 리스트용 구조체
11
struct Node
12
...{
13
struct Node *PrevNode; //역방향 포인터
14
char Name[20]; //이름
15
char Phone[20]; //전화번호
16
struct Node *NextNode; //정방향 포인터
17
};
18
19
struct Node *GetNode(void);
20
21
// 메인 함수
22
void main(void)
23
...{
24
int i = 0;
25
struct Node *head, *tail, *current;
26
27
//역방향 리스트 생성
28
tail = NULL;
29
30
current = GetNode();
31
strcpy(current->Name, "aa");
32
strcpy(current->Phone, "11");
33
34
current->PrevNode = tail;
35
tail = current;
36
37
current = GetNode();
38
strcpy(current->Name, "bb");
39
strcpy(current->Phone, "22");
40
41
current->PrevNode = tail;
42
tail = current;
43
44
current = GetNode();
45
strcpy(current->Name, "cc");
46
strcpy(current->Phone, "33");
47
48
current->PrevNode = tail;
49
tail = current;
50
51
// 정방향 리스트 생성
52
current = tail;
53
head = NULL;
54
55
current->NextNode = head;
56
head = current;
57
current = current->PrevNode;
58
59
current->NextNode = head;
60
head = current;
61
current = current->PrevNode;
62
63
current->NextNode = head;
64
head = current;
65
current = current->PrevNode;
66
67
// 정방향 리스트 출력
68
current = head;
69
70
printf("%s %s\n", current->Name, current->Phone);
71
current = current->NextNode;
72
73
printf("%s %s\n", current->Name, current->Phone);
74
current = current->NextNode;
75
76
printf("%s %s\n", current->Name, current->Phone);
77
current = current->NextNode;
78
79
// 역방향 리스트 출력
80
current = tail;
81
82
printf("%s %s\n", current->Name, current->Phone);
83
current = current->PrevNode;
84
85
printf("%s %s\n", current->Name, current->Phone);
86
current = current->PrevNode;
87
88
printf("%s %s\n", current->Name, current->Phone);
89
current = current->PrevNode;
90
}
91
92
// 구조체 크기만큼 메모리 할당
93
struct Node *GetNode(void)
94
...{
95
return (struct Node *)malloc(sizeof(struct Node));
96
}