정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여덟 가지이다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DEQUE_SIZE 20000
struct __duqueueType {
int *data;
int rear, front;
};
struct __duqueueType Deque;
void init_Deque(){
Deque.data = (int*)malloc(sizeof(int)*MAX_DEQUE_SIZE);
Deque.rear = 10000;
Deque.front = 10000;
return;
}
int empty(){
return (Deque.rear == Deque.front ? 1 : 0);
}
void push_front(){
int num;
scanf("%d\\n", &num);
Deque.data[++Deque.front] = num;
}
void push_back(){
int num;
scanf("%d\\n", &num);
Deque.data[Deque.rear] = num;
Deque.rear -= 1;
}
void pop_front(){
if(empty()) {
printf("-1\\n");
return;
}
else
printf("%d\\n", Deque.data[Deque.front--]);
}
void pop_back(){
if(empty()) {
printf("-1\\n");
return;
}
else
printf("%d\\n", Deque.data[++Deque.rear]);
}
void size(){
printf("%d\\n", (Deque.front - Deque.rear));
}
void front(){
if(empty()) {
printf("-1\\n");
return;
}
else{
printf("%d\\n", Deque.data[Deque.front]);
}
}
void back(){
if(empty()) {
printf("-1\\n");
return;
}
else{
printf("%d\\n", Deque.data[Deque.rear + 1]);
}
}
void check(){
char command[11];
scanf("%s", command);
if(!strcmp(command, "push_front")) push_front();
else if(!strcmp(command, "push_back")) push_back();
else if(!strcmp(command, "pop_front")) pop_front();
else if(!strcmp(command, "pop_back")) pop_back();
else if(!strcmp(command, "size")) size();
else if(!strcmp(command, "empty")) {
if(empty()) {
printf("1\\n");
return;
}
printf("0\\n");
}
else if(!strcmp(command, "front")) front();
else if(!strcmp(command, "back")) back();
}
void print_debug(){
printf("Deque = ");
for(int i = Deque.rear + 1; i <= Deque.front; i++){
printf("%d ", Deque.data[i]);
}
printf("\\n");
}
int main() {
int N;
init_Deque();
scanf("%d", &N);
for(int i = 0; i < N; i++){
check();
// print_debug();
}
return 0;
}