본문 바로가기
  • hazard_dev@__
  • hazard_dev@__
C

큐가 뭔가요!!(c_queue)

by Hazard3_o00sung 2020. 3. 2.
728x90

본 포스트는 c언어를 중심으로 작성되었습니다.

 

큐가 뭔가요!!(c_queue)

 

당구 큐대

위 사진은 당구장을 가보신 분이라면 아시듯이 당구 큐대입니다. 본인은 4구 150에 쓰리쿠션 100정도의 이상한 평균실력을 가지고 있습니다. ㅋㅋㅋ그냥 가져와봤습니다.

 

큐에 대해서 설명을 간략하게 이어나가겠습니다.

 

여러분도 아시다시피 큐또한 스택과 같이 데이터를 저장하는공간을 의미합니다. 앞서서 스택은 후입선출방식을 따릅니다. 그렇다면 큐는 어떤 특성을 가질까요

 

  스택
공통점 데이터의 삽입과 삭제가 제한되는 순서리스트라는 점에서 스택과 동일합니다.
차이점 LIFO방식을 따릅니다. FIFO방식을 따릅니다

FIFO방식은 무었을 의미할까요? First in First out을 의미합니다. 먼저들어온 데이터가 먼저 삭제된다는 것이죠

 

예를 들자면, 놀이공원에 갔다고 가정해보겠습니다. 맨앞줄에 선 사람들은 놀이기구를 먼저 타게 되고 먼저 나오게 됩니다. 이런 방식에 기인한다는 뜻입니다.

 

그렇다면, 논리적형태는 어떻게될까요?

 

삭제 첫번째인자 --- --- 마지막인자 삽입

 

위와 같습니다. 마지막인자에 들어가는 연산을 enQueue, 첫번째 인자에서 삭제되는 연산을 deQueue라고 합니다. 

 

그렇다면 구현을 해보아야 직성이 풀리니 구현을 해보도록 하겠습니다.

 

 

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Q_SIZE 4
 
typedef char element;
typedef struct
{
    element Queue[Q_SIZE];
    int first, last;
} QueueType;
 
 
QueueType *createQueue() {
    QueueType *Q; //구조체 포인터변수생성
    Q = (QueueType*)malloc(sizeof(QueueType));
    //메모리할당
    Q->first = -1;//초깃값으로 -1을 삽입 왜냐하면 null값이기 
    Q->last = -1;
    return Q;
}
 
int isEmpty(QueueType *Q)
{
    if (Q->first = Q->last)
    {
        printf("큐가 비어있는 상태입니다");
        return 1;
    }
    else return 0;
}
 
 
int noSeat(QueueType *Q)
{
    if (Q->last == Q_SIZE - 1)
    {
        printf("큐에 자리가 없습니다");
        return 1;
    }
    else return 0;
}
 
void enQueue(QueueType *Q, element data)
{
    if (noSeat(Q)) return 0;
    else
    {
        Q->first++;
        Q->Queue[Q->last] = data;
    }
}
 
element deQueue(QueueType *Q)
{
    if (noSeat(Q)) return 0;
    else
    {
        Q->first++;
        return Q->Queue[Q->first];
    }
}
element search(QueueType *Q)
{
    if (noSeat(Q)) exit(1);
    else
        return Q->Queue[Q->first + 1];
}
 
void Print(QueueType *Q)
{
    int i;
    printf("Queue : ");
    for (i = Q->first + 1; i <= Q->last; i++)
    {
        printf("%3c", Q->Queue[i]);
    }
    printf(" ");
}
 
 
void main() {
    QueueType *= createQueue();
    element data;
    printf("큐 연산을 시작합니다");
    printf("\n Insert A ->"); enQueue(Q, 'A'); Print(Q);
    printf("\n Insert B ->"); enQueue(Q, 'B'); Print(Q);
    printf("\n Insert C ->"); enQueue(Q, 'C'); Print(Q);
    data = search(Q); printf("\n search data : %c \n", data);
}
cs

 

위와 같이 코드를 생성해볼 수 있겠습니다. 

 

 

 

댓글 /피드백 환영합니다!!

728x90

'C' 카테고리의 다른 글

큐에 대한 가벼운 생각  (0) 2020.03.02
큐가 뭔가요!( C,Queue)[2]  (0) 2020.03.02
STACK(스택)이 뭔가요?[2]  (0) 2020.02.21
STACK(스택)이 뭔가요?[1]  (0) 2020.02.20
이중연결리스트 전격해부!!!  (0) 2020.02.19

댓글