앞선 시간에 Queue의 구조적인 설명은 끝마쳤다. 이제는 실제로 코딩을 해보자.
우선 모든 데이터는 NODE라는 묶음으로 이루어 진다고 했다.
NODE = Data + Link(포인터)
1
2
3
4
5
|
typedef struct Node {
int data;
struct Node* next;
}NODE;
|
cs |
기본적으로 구조체를 만들고, int 형 정보를 저장하는 NODE를 만든것이다.
특이점 하나는, 선언한 구조체 안에, 그 구조체포인터가 다시한번 선언되고 있는점이다.
여기서 하나 알아 두어야 할 것은 구조체는 자기자신을 포함할 수 있다.
typedef 를 이용해서 선언하지 않는 이유는, typedef는 구조체에서 완전히 빠져나간 후에 사용할 수 있기 때문이다.
자 그럼이제 큐의 뼈대를 생성해보자.
1
2
3
4
5
6
|
typedef struct Queue {
NODE* front;
NODE* rear;
int count;
}QUEUE;
|
cs |
큐는 현재 데이터의 갯수를 세는 count 정수와 두개의 노드 포인터로 이루어진다.
두개의 노드포인터는 각각 front 와 rear 이다.
NODE* 형태로 하는 이유는, 당현히 구성되는 자료들이 모드 노드형태로 저장이 되고
그것의 주소값을 저장하기 위해서는 NODE형태가 필요한 것이기 때문이다.
여기서 하나 또 알아 두어야 할 것은 front 와 rear은 포인터로서의 역할만 하기 위함이기 때문에
front->data
rear->data
의 값은 저장하지 않는다.
이제 구조체 선언은 모두 끝났다.
이제 main 함수에 queue를 생성하고,삽입,추출,제거 만 구현을 해주면된다.
단순히 main 함수안에 모든것을 구현 할 수있지만, 자료가 커지게 된다면, 위의 4가지 동작 하나하나를 하기위해
많은 코드소요가 들것이다. 그렇지 않기 위해서는 함수를 구현해주는 것이 바람직하다.
너무 길게 쓰면 가독성도 떨어지고 따라오는 입장에서 지칠 수 있기 때문에,
각각 함수구현은 총 4번에 걸쳐 따로 설명을 하고, 마지막에 메인함수를 다루고, 실행결과를 실험해 보자.
'Archive' 카테고리의 다른 글
[7] Queue 함수 구현하기 - destroyQueue (0) | 2020.10.06 |
---|---|
[6] Queue 함수 구현하기 - deQueue (0) | 2020.10.06 |
[5] Queue 함수 구현하기 - enQueue (0) | 2020.10.06 |
[4] Queue 함수 구현하기 - CreateQueue (0) | 2020.09.22 |
[2] Queue(큐)란 무엇인가? (0) | 2020.09.21 |