gaelim   2년 전

참고자료는 geeks for geeks 의 implementation deque with circular array 입니다. 똑같지 않은부분이 있기때문에 세세한 곳은 다릅니다..

http://www.geeksforgeeks.org/i...


자료구조를 쓴다기보다 그냥 배열로 구현을 해보았고, 저혼자서 이것저것 해보았는데 잘 수행되었습니다. 그런데 바로 틀렸다구 뜹니다... 어떤 것을 제가 잘못했을까요?



#include <stdio.h>
#include <string.h>
#define MAX 1000001

int dq[MAX], front=-1,rear=-1;

int empty(){ return front==-1; }

void pushback(int n){
  if (front==-1) front=rear=0;
  else if (rear==MAX-1) rear=0;
  else rear++;
  dq[rear]=n;
}

void pushfront(int n){
  if (front==-1) front=rear=0;
  else if (front==0) front=MAX-1;
  else front--;
  dq[front]=n;
}

int popfront(){
  int ret=dq[front];
  if (empty()) ret=-1;
  else{
    if (front == rear) front = rear = -1;
    else if (front==MAX-1) front=0;
    else front++;
  }
  return ret;
}

int popback(){
  int ret=dq[rear];
  if (empty()) ret=-1;
  else{
    if (front == rear) front = rear = -1;
    else if (rear==0)  rear=MAX-1;
    else  rear--;
  }
  return ret;
}

int ffront(){ if (empty()) return -1; return dq[front]; }
int back(){ if (empty()) return -1;  return dq[rear]; }

int size(){
  int ret;
  if (front==-1) ret=0;
  else if (front >rear) ret=MAX-front-rear+1;
  else ret=rear-front+1;
  return ret;
}

int main(){
  int T;
  scanf("%d", &T);
  while (T--){
    char str[51];
    int n;
    scanf("%s", str);
    if (!strcmp(str,"push_back")) {
      scanf("%d", &n);
      pushback(n);
    }

    else if (!strcmp(str,"push_front")){
      scanf("%d", &n);
      pushfront(n);
    }

    else if (!strcmp(str,"pop_front")) printf("%d\n", popfront());
    else if (!strcmp(str,"pop_back")) printf("%d\n", popback());
    else if (!strcmp(str,"front")) printf("%d\n", ffront());
    else if (!strcmp(str,"back")) printf("%d\n", back());
    else if (!strcmp(str,"size")) printf("%d\n", size());
    else if (!strcmp(str,"empty")) printf("%d\n", empty());
  }
}


댓글을 작성하려면 로그인해야 합니다.