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
|
#define _CRTDBG_MAP_ALLOC
#include<stdio.h>
#include<stdlib.h>
#include<crtdbg.h>
typedef struct Node {
int data;
struct Node* next;
}NODE;
typedef struct Queue {
int count;
NODE* front;
NODE* rear;
}QUEUE;
QUEUE* createQueue(void) {
QUEUE* queue = (QUEUE*)malloc(sizeof(QUEUE));
queue->count = 0;
queue->front = NULL;
queue->rear = NULL;
return queue;
}
void enqueue(QUEUE* queue, int data) {
NODE* new_node = (NODE*)malloc(sizeof(NODE));
new_node->data = data;
new_node->next = NULL;
//queue is empty
if (queue->count == 0) {
queue->front = new_node;
}
else {//queue is more
queue->rear->next = new_node;
}
queue->rear = new_node;
queue->count++;
}
void dequeue(QUEUE* queue) {
NODE* delete_node;
delete_node = queue->front;
//data 1
if (queue->count == 0) {
return;
}else if (queue->count == 1) {
queue->front = NULL;
queue->rear = NULL;
}
else {//data 1or more
queue->front = queue->front->next;
}
queue->count--;
free(delete_node);
}
void destroyQueue(QUEUE* queue) {
NODE* delete;
if (queue->count == 0) {
free(queue);
}
else {
while (queue->front != NULL) {
delete = queue->front->next;
free(queue->front);
queue->front = delete;
}
}
free(queue);
}
void displayQueue(QUEUE* queue) {
NODE* Ptr;
Ptr = queue->front;
while (Ptr != NULL) {
printf("%d\n", Ptr->data);
Ptr = Ptr->next;
}
}
int main() {
QUEUE* queue = createQueue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
displayQueue(queue);
printf("queue count : %d\n", queue->count);
destroyQueue(queue);
_CrtDumpMemoryLeaks();
return 0;
}
|
cs |
추가적으로 displayQueue도 구현해서 작성을 해보았습니다.
displayQueue같은 경우 반드시 NODE포인터를 생성하여 거기다가 하나씩
queue의 내용을 넣고 출력을해야됩니다.
그렇지 않고 바로 queue의 내용을 차례대로 출력한다면, queue내용 자체가
바뀌어버리기 때문에, 반드시! NODE 포인터를 이용해서 자료를 담아서 출력해야 되겠습니다.
이 코드를 그대로 사용할 경우 메모리누수는 전혀 없습니다.
반응형
'Archive' 카테고리의 다른 글
2. 크기의 단위 (0) | 2021.01.19 |
---|---|
1. background-color와 color (0) | 2021.01.18 |
[7] Queue 함수 구현하기 - destroyQueue (0) | 2020.10.06 |
[6] Queue 함수 구현하기 - deQueue (0) | 2020.10.06 |
[5] Queue 함수 구현하기 - enQueue (0) | 2020.10.06 |