#include <stdio.h>
#define MAX_QUEUE_SIZE 10

// 원형큐 addq(), deleteq()

// 처음 상태

// front
// rear
//  ↓
//  0     1     2     3     4
// ┌────┬────┬────┬────┬────┐
// │    │    │    │    │    │
// └────┴────┴────┴────┴────┘

// ① rear가 다음 위치로 이동했을 때 front와 같은가?
//               ↓
//        YES ───────→ 큐 Full → 삽입하지 않음

//        NO
//        ↓
// ② rear를 다음 위치로 이동
//        ↓
// ③ 그 위치에 item 저장
// front == rear
// → 비어 있음

typedef struct {
    int key;
} element;

element queue[MAX_QUEUE_SIZE];

//int front = -1, rear = -1;  // 이건 선형큐일때만 가능
int front = 0, rear = 0;  //원형큐일때는 front, rear 시작값이 달라야함

void queueFull();
element queueEmpty(void);

void queueFull()
{
    printf("QUEUE IS FUll");
}

/* 큐가 비어 있을 때 */
element queueEmpty()
{
    element item;

    printf("QUEUE IS Empty\n");

    item.key = -1;

    return item;
}

// 데이터삽입(rear에서만 발생)-> rear 증가 → 증가된 rear 위치에 item 삽입
void addq(element item)
{
    rear = (rear+1) % MAX_QUEUE_SIZE;
    if(front == rear){ //rear의 바로 다음 칸이 front이면 Full
        queueFull();
        return; //<--반드시 있어야함. 없으면 다음 명령어가 실행되버림
    }
    queue[rear] = item; //rear 이동 → 그 위치에 삽입
}

// 데이터삭제(front에서만 발생)
// front 이동 → 그 위치의 데이터 반환 → 논리적으로 삭제
element deleteq()
{
    if(front == rear){
        return queueEmpty();
    }  
    front = (front+1)%MAX_QUEUE_SIZE;
    return queue[front];
}

/* 현재 큐 내용 출력 */
void printQueue()
{
    int i;

    printf("QUEUE : ");

    for (i = front + 1; i <= rear; i++)
    {
        printf("%d ", queue[i].key);
    }

    printf("\n");
}

int main() {    
  
    element item;

    /* 10 삽입 */
    item.key = 10;
    addq(item);

    /* 20 삽입 */
    item.key = 20;
    addq(item);

    /* 30 삽입 */
    item.key = 30;
    addq(item);

    /* 현재 큐 출력 */
    printQueue();


    /* 데이터 하나 삭제 */
    item = deleteq();
    printf("삭제된 데이터 : %d\n", item.key);

    /* 삭제 후 큐 출력 */
    printQueue();


    /* 데이터 하나 더 삭제 */
    item = deleteq();
    printf("삭제된 데이터 : %d\n", item.key);

    /* 삭제 후 큐 출력 */
    printQueue();

    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: