#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;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: