#include<stdio.h>
#include<stdlib.h>
#define QLEN 100
#define TRUE 1
#define FALSE 0
typedef int Data;
typedef struct _Qu
{
int front;
int rear;
Data queArr[QLEN];
}Qu;
typedef Qu Queue;
void QInit(Queue *p); //큐를 초기화 한다. 제일먼저 호출되야한다.
int QIsEmpty(Queue *p); //큐가 비었는지 아닌지 판단.True or False
void QPush(Queue *p, Data data); //큐에 데이터 저장.
Data QPop(Queue *p); //큐에서 가장 먼저 push 한 데이터를 이때 반환
//if (QIsEmpty(Queue *p)
// printf("큐가 비었습니다.");
// return false; //데이터가 하나 있는지 보장되야됨.
Data QPeek(Queue *p);//데이터
//if (QIsEmpty(Queue *p)
// printf("큐가 비었습니다.");
// return false; //데이터가 하나 있는지 보장되야됨.
int main(void)
{
Queue q;
QInit(&q);
QPush(&q,1);
QPush(&q,3);
while(QIsEmpty(&q)!=0)
printf("%d",QPop(&q));
return 0;
}
int NextPoint(int point)
{
if(point==QLEN-1)
return 0;
else
return point+1;
}
void QInit(Queue *p)
{
p->front = 0; //0은 비워져
p->rear = 0;
}
int QIsEmpty(Queue *p)
{
if(p->rear==p->front)
return TRUE;
else
return FALSE;
}
void QPush(Queue *p,Data data)
{
if(NextPoint(p->rear)==p->front)//다음을 가리키는것을 뽑아내야될 필요성.
exit(-1);
p->rear = NextPoint(p->rear); //하나
p->queArr[p->rear] = data;
}
Data QPop(Queue *p)
{
if(QIsEmpty(&p)==1)
exit(-1);
printf("Empty not!");
p->front=NextPoint(p->front);
return p->queArr[p->front];
}
Data QPeek(Queue *p)
{
int tmp=0;
if(QIsEmpty(&p)==1)
exit(-1);
tmp = NextPoint(p->front);
return p->queArr[tmp];
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNkZWZpbmUgUUxFTiAxMDAKI2RlZmluZSBUUlVFIDEKI2RlZmluZSBGQUxTRSAwCnR5cGVkZWYgaW50IERhdGE7CnR5cGVkZWYgc3RydWN0IF9RdQp7CglpbnQgZnJvbnQ7CglpbnQgcmVhcjsKCURhdGEgcXVlQXJyW1FMRU5dOwp9UXU7Cgp0eXBlZGVmIFF1IFF1ZXVlOwoKdm9pZCBRSW5pdChRdWV1ZSAqcCk7ICAvL+2BkOulvCDstIjquLDtmZQg7ZWc64ukLiDsoJzsnbzrqLzsoIAg7Zi47Lac65CY7JW87ZWc64ukLgoKaW50IFFJc0VtcHR5KFF1ZXVlICpwKTsgLy/tgZDqsIAg67mE7JeI64qU7KeAIOyVhOuLjOyngCDtjJDri6guVHJ1ZSBvciBGYWxzZQoKdm9pZCBRUHVzaChRdWV1ZSAqcCwgRGF0YSBkYXRhKTsgLy/tgZDsl5Ag642w7J207YSwIOyggOyepS4KCkRhdGEgUVBvcChRdWV1ZSAqcCk7IC8v7YGQ7JeQ7IScIOqwgOyepSDrqLzsoIAgcHVzaCDtlZwg642w7J207YSw66W8IOydtOuVjCDrsJjtmZgKLy9pZiAoUUlzRW1wdHkoUXVldWUgKnApCi8vCQlwcmludGYoIu2BkOqwgCDruYTsl4jsirXri4jri6QuIik7Ci8vCQlyZXR1cm4gZmFsc2U7IC8v642w7J207YSw6rCAIO2VmOuCmCAg7J6I64qU7KeAIOuztOyepeuQmOyVvOuQqC4KCkRhdGEgUVBlZWsoUXVldWUgKnApOy8v642w7J207YSwIAovL2lmIChRSXNFbXB0eShRdWV1ZSAqcCkKLy8JCXByaW50Zigi7YGQ6rCAIOu5hOyXiOyKteuLiOuLpC4iKTsKLy8JCXJldHVybiBmYWxzZTsgLy/rjbDsnbTthLDqsIAg7ZWY64KYICDsnojripTsp4Ag67O07J6l65CY7JW865CoLgoKCmludCBtYWluKHZvaWQpCnsKCVF1ZXVlIHE7CglRSW5pdCgmcSk7CgkKCVFQdXNoKCZxLDEpOwoJUVB1c2goJnEsMyk7Cgl3aGlsZShRSXNFbXB0eSgmcSkhPTApCgkJcHJpbnRmKCIlZCIsUVBvcCgmcSkpOwoJcmV0dXJuIDA7Cn0KCmludCBOZXh0UG9pbnQoaW50IHBvaW50KQp7CglpZihwb2ludD09UUxFTi0xKQoJcmV0dXJuIDA7CgllbHNlCglyZXR1cm4gcG9pbnQrMTsKfQp2b2lkIFFJbml0KFF1ZXVlICpwKQp7CglwLT5mcm9udCA9IDA7IC8vMOydgCDruYTsm4zsoLggCglwLT5yZWFyID0gMDsKfQoKaW50IFFJc0VtcHR5KFF1ZXVlICpwKQp7CglpZihwLT5yZWFyPT1wLT5mcm9udCkKCQlyZXR1cm4gVFJVRTsKCWVsc2UKCQlyZXR1cm4gRkFMU0U7Cn0KCnZvaWQgUVB1c2goUXVldWUgKnAsRGF0YSBkYXRhKQp7CglpZihOZXh0UG9pbnQocC0+cmVhcik9PXAtPmZyb250KS8v64uk7J2M7J2EIOqwgOumrO2CpOuKlOqyg+ydhCDrvZHslYTrgrTslbzrkKAg7ZWE7JqU7ISxLgoJCWV4aXQoLTEpOwoJCglwLT5yZWFyID0gTmV4dFBvaW50KHAtPnJlYXIpOyAvL+2VmOuCmCAKCXAtPnF1ZUFycltwLT5yZWFyXSA9IGRhdGE7Cn0KCkRhdGEgUVBvcChRdWV1ZSAqcCkKewoJaWYoUUlzRW1wdHkoJnApPT0xKQoJCWV4aXQoLTEpOwoJcHJpbnRmKCJFbXB0eSBub3QhIik7CglwLT5mcm9udD1OZXh0UG9pbnQocC0+ZnJvbnQpOwoJcmV0dXJuIHAtPnF1ZUFycltwLT5mcm9udF07Cn0KCkRhdGEgUVBlZWsoUXVldWUgKnApCnsKCWludCB0bXA9MDsKCWlmKFFJc0VtcHR5KCZwKT09MSkKCQlleGl0KC0xKTsKCXRtcCA9IE5leHRQb2ludChwLT5mcm9udCk7CglyZXR1cm4gcC0+cXVlQXJyW3RtcF07Cn0K