#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define QUE_LEN 10001
typedef int Data;
typedef struct _cQueue
{
int front;
int rear;
Data queArr[QUE_LEN];
}Queue;
void QueueInit(Queue * pq)
{
pq->front = 0;
pq->rear = 0;
}
int QIsEmpty(Queue * pq)
{
if(pq->front == pq->rear)
return TRUE;
else
return FALSE;
}
int front(Queue *pq)
{
if(QIsEmpty(pq))
{
return -1;
}
return pq->queArr[pq->front+1];
}
int back(Queue *pq)
{
if(QIsEmpty(pq))
{
return -1;
}
return pq->queArr[pq->rear];
}
void Enqueue(Queue * pq, Data data)
{
pq->rear = (pq->rear + 1) % QUE_LEN;
pq->queArr[pq->rear] = data;
}
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
return -1;
}
pq->front = (pq->front+1)%QUE_LEN;
return pq->queArr[pq->front];
}
int size(Queue *pq)
{
return pq->rear - pq->front;
}
int main(void)
{
Queue q;
char str[6];
int newNum;
QueueInit(&q);
int num;
scanf("%d",&num);
for(int i=0;i<num;i++)
{
scanf("%s",str);
if(!strcmp(str, "push"))//같으면 0출력
{
scanf("%d",&newNum);
Enqueue(&q, newNum);
}
else if(!strcmp(str, "pop"))
{
printf("%d\n",Dequeue(&q));
}
else if(!strcmp(str, "size"))
{
printf("%d\n",size(&q));
}
else if(!strcmp(str, "empty"))
{
printf("%d\n",QIsEmpty(&q));
}
else if(!strcmp(str, "front"))
{
printf("%d\n",front(&q));
}
else if(!strcmp(str, "back"))
{
printf("%d\n",back(&q));
}
}
return 0;
}
큐에 관한 문제이다 문자열을 받는 방식은 앞서 푼 스택과 동일시하게 진행하면된다.
그리고 큐의 엔큐와 디큐에 나머지 연산자를 사용하는것은 원형큐를 활용하기 위한 것이다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define QUE_LEN 2000001
typedef int Data;
typedef struct _cQueue
{
int front;
int rear;
Data queArr[QUE_LEN];
}Queue;
void QueueInit(Queue * pq)
{
pq->front = 0;
pq->rear = 0;
}
int QIsEmpty(Queue * pq)
{
if(pq->front == pq->rear)
return TRUE;
else
return FALSE;
}
int front(Queue *pq)
{
if(QIsEmpty(pq))
{
return -1;
}
return pq->queArr[pq->front+1];
}
int back(Queue *pq)
{
if(QIsEmpty(pq))
{
return -1;
}
return pq->queArr[pq->rear];
}
void Enqueue(Queue * pq, Data data)
{
pq->rear = (pq->rear + 1) % QUE_LEN;
pq->queArr[pq->rear] = data;
}
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
return -1;
}
pq->front = (pq->front+1)%QUE_LEN;
return pq->queArr[pq->front];
}
int size(Queue *pq)
{
return pq->rear - pq->front;
}
int main(void)
{
Queue q;
char str[6];
int newNum;
QueueInit(&q);
int num;
scanf("%d",&num);
for(int i=0;i<num;i++)
{
scanf("%s",str);
if(!strcmp(str, "push"))//같으면 0출력
{
scanf("%d",&newNum);
Enqueue(&q, newNum);
}
else if(!strcmp(str, "pop"))
{
printf("%d\n",Dequeue(&q));
}
else if(!strcmp(str, "size"))
{
printf("%d\n",size(&q));
}
else if(!strcmp(str, "empty"))
{
printf("%d\n",QIsEmpty(&q));
}
else if(!strcmp(str, "front"))
{
printf("%d\n",front(&q));
}
else if(!strcmp(str, "back"))
{
printf("%d\n",back(&q));
}
}
return 0;
}
그냥 위의 큐에서 범위만 바꿔주니 맞았당...
뭘 정확히 체크해야할지는 나중에 .. ! 하겠다 헿..
아 몰ㄹ랑 !