포스트

[ C++ ] 양방향 연결 리스트

양방향 연결 리스트



  • 머리(Head) 와 꼬리(Tail)로 모두 가진다는 특징

  • 각 노드는 앞 노드와 뒤 노드의 정보를 모두 저장


연결리스트 삽입 과정


  • 데이터를 ‘오름차순’으로 저장하는 양방향 연결 리스트
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
#define _CRT_SECIRE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

typedef struct {

int data;

struct Node* prev;

struct Node* next;

} Node;

Node* head,*tail;

void insert(int data) {

Node* node = (Node*)malloc(sizeof(Node));

node->data = data;

Node* cur;

cur = head->next;

while (cur->data < data && cur != tail)

{

cur = cur->next;

}

Node* prev = cur->prev;

prev->next = node;

node->prev = prev;

cur->prev = node;

node->next = cur;

}

void removeFront() {

Node* node = head->next;

head->next = node->next;

Node* next = node->next;

next->prev = head;

free(node);

}

void show() {

Node* cur = head->next;

while (cur != tail) {

printf("%d", cur->data);

cur = cur->next;

}

}

int main(void) {

head=(Node*)malloc(sizeof(Node));

tail = (Node*)malloc(sizeof(Node));

head->next = tail;

head->prev = head;

tail->next = tail;

tail->prev = head;

insert(2);

insert(1);

insert(3);

insert(9);

insert(7);

removeFront();

show();

system("pause");

return 0;

}



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.