#include <stdio.h>
#define MAX_QUEUE_SIZE 10
// main이 front, rear를 가지고 있고, 변경이 필요한 변수의 주소를 함수에 넘겨서 함수가 원본을 변경
// addq(&rear, item);
// ↑
// rear를 변경해야 하므로 주소 전달
// deleteq(&front, rear);
// ↑ ↑
// 변경함 읽기만 함
// 주소 값
typedef struct {
int key;
} element;
element queue[MAX_QUEUE_SIZE];
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 삽입
// addq(&rear, item); -> ++(*rear) -> main의 실제 rear가 변경
// 즉 main에 있는 원본 rear를 증가시킨 것
void addq(int *rear, element item)
{
if(*rear == MAX_QUEUE_SIZE-1){
queueFull();
return;
}
queue[++*rear] = item; //queue[++(*rear)]
}
// 데이터삭제(front에서만 발생)
// deleteq(&front, rear) -> main의 실제 front를 변경, rear는 값만 확인하면 되기때문에 변수로 넘김
// main의 실제 front를 변경
element deleteq(int *front, int rear)
{
if(*front == rear){
return queueEmpty();
}
return queue[++*front]; // front를 증가시켜 가장 앞의 데이터를 반환, 해당 위치를 앞으로 큐의 유효 데이터에서 제외
}
int main() {
int front = -1;
int rear = -1;
element item;
/* 10 삽입 */
item.key = 10;
addq(&rear, item);
/* 20 삽입 */
item.key = 20;
addq(&rear, item);
/* 30 삽입 */
item.key = 30;
addq(&rear, item);
/* 데이터 삭제 */
item = deleteq(&front, rear);
printf("삭제 : %d\n", item.key);
item = deleteq(&front, rear);
printf("삭제 : %d\n", item.key);
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: