#include <stdio.h>
#define MAX_QUEUE_SIZE 10

// addq()와 deleteq()가 전역변수 front, rear를 직접 찾아가서 변경

typedef struct {
    int key;
} element;

element queue[MAX_QUEUE_SIZE];

int front = -1, rear = -1;

void queueFull();
element queueEmpty(void);

// queue
// index   0    1    2    3 ...
//        ┌────┬────┬────┬────┐
//        │    │    │    │    │
//        └────┴────┴────┴────┘

// front = -1
// rear  = -1

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

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

    printf("QUEUE IS Empty\n");

    item.key = -1;

    return item;
}


// 데이터삽입(rear에서만 발생)-> rear 증가 → 증가된 rear 위치에 item 삽입
// 현재 선형 큐 코드는 rear의 초기값이 -1이기 때문에 queue[++rear] = item;을 
// 사용해서 먼저 rear를 0으로 만든 다음 queue[0]에 첫 데이터를 넣는 방식
void addq(element item)
{
    if(rear == MAX_QUEUE_SIZE-1){
        queueFull();
        //return;
    }
    queue[++rear] = item;
}

// 데이터삭제(front에서만 발생)
// front 증가 -> 해당 위치의 값을 반환 
// front가 그 위치를 지나갔으므로 앞으로 그 데이터를 큐의 데이터로 취급하지 않음
element deleteq()
{
    if(front == rear){
        return queueEmpty();
    }  
    return queue[++front]; //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: