본문 바로가기
Archive

[3] C언어로 Queue(큐) 구현하기

by livemehere 2020. 9. 22.

 앞선 시간에 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번에 걸쳐 따로 설명을 하고, 마지막에 메인함수를 다루고, 실행결과를 실험해 보자.

반응형