본문 바로가기
Archive

[8]QUEUE의 최종 구현 - C

by livemehere 2020. 10. 6.
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* queueint 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(queue1);
    enqueue(queue2);
    enqueue(queue3);
    
 
    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