문제
링크
풀이
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Queue {
Node *front;
Node *rear;
int count;
} Queue;
void initQueue(Queue *queue) {
queue->front = queue->rear = NULL;
queue->count = 0;
}
int isEmpty(Queue *queue) {
return queue->count == 0;
}
void enqueue(Queue *queue, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isEmpty(queue))
queue->front = newNode;
else
queue->rear->next = newNode;
queue->rear = newNode;
queue->count++;
}
int dequeue(Queue *queue) {
int data;
Node *ptr;
if (isEmpty(queue))
return 0;
ptr = queue->front;
data = ptr->data;
queue->front = ptr->next;
free(ptr);
queue->count--;
return data;
}
int main(void) {
int n;
Queue queue;
initQueue(&queue);
scanf("%d", &n);
for (int i=1; i<=n; i++)
enqueue(&queue, i);
int tmp, turn = 1;
while (queue.count > 1) {
tmp = dequeue(&queue);
if (turn == 1) {
turn = 0;
} else {
enqueue(&queue, tmp);
turn = 1;
}
}
printf("%d", dequeue(&queue));
return 0;
}