사이즈5인 큐에 1->2->3->4순으로 삽입후 

5번째 요소를 넣을 때 정상적으로 삽입됨을 확인하고 모든 원소 삭제를 삭제 후 현재 front와 rear변수 위치 확인하기 


핵심

1.원형큐는 최초의 한칸 (0번째 배열인덱스자리)을 비워둔다.

최초의 front ,rear 위치

선형큐: front==rear==-1

배열큐: front==rear==0


3. 사소한 실수 조심하기

선형큐 때는 연산 시 return 문을 한줄로 표현할 수 있었는데 

원형큐에서 삽입/삭제 연산 시 아래와 같이 작성하면 어떻게될까요?

q->Queue[(q->rear + 1) % MAX_SIZE]=data;

=> rear는 증가하지않고 1번 째 자리에 원소를 대입합니다.

결국에는 이러한 연산을 100번해도 1번째 자리에 원소를 100번 연산하는 꼴이됩니다.

그렇기 때문에  2줄로 나눠서 코드를 작성해야합니다.


q->rear=q->(rear+1)%MAX_SIZE;

q->Queue[q->rear]=data;



코드

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
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
/*사이즈5인 큐에 1->2->3->4순으로 삽입후
5번째 요소를 넣을 때 정상적으로 삽입됨을 확인하고 모든 원소 삭제를 삭제 후 현재 front와 rear변수 위치 확인하기*/
#define MAX_SIZE 5
typedef struct
{
    int Queue[MAX_SIZE];
    int front, rear;
}QType;
void init(QType* q)
{
    q->front = q->rear = 0;
}
int is_full(QType* q)
{
    return ((q->rear + 1) % MAX_SIZE == q->front);
}
void enQueue(QType* q, int data)
{
    if (is_full(q))
    {
        fprintf(stderr, "꽉 차서 원소를 삽입할 수 없어요..\n");
        return;
    }
    q->rear = (q->rear + 1) % MAX_SIZE;
    q->Queue[q->rear]=data;
}
int is_empty(QType* q)
{
    return q->front == q->rear;
}
int deQueue(QType* q)
{
    if (is_empty(q))
    {
        fprintf(stderr, "큐가 비어서 삭제할 수 없습니다..\n");
        exit(1);
    }
    q->front = (q->front + 1) % MAX_SIZE;
    return q->Queue[q->front];
}
int main()
{
    QType q;
    int data;
    init(&q);
    //5개 요소를 꽉차지않을 때 까지(5개)삽입하기
    int i = 1;
    while (!is_full(&q))
    {
        printf("%d번째 원소를 삽입합니다.\n", i++);
        scanf("%d"&data);
        enQueue(&q, data);
    }
    //5번째 원소삽입-> 오류
    enQueue(&q, data);//-> 오류메시지출력
    while (!is_empty(&q))
        printf("%d을 삭제합니다.\n", deQueue(&q));
    
    printf("현재 front와 rear의 위치는(인덱스 자리는) 각각 %d %d입니다.\n", q.front, q.rear);
    return 0;
}
cs



결과


'자료구조 > ' 카테고리의 다른 글

선형 큐(배열 큐) 구현하기  (0) 2020.04.16

+ Recent posts