Advertisement
mantertius

deque_to_complete.c

Apr 22nd, 2021
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //----------------------------------------------------------------------------------------
  2.  
  3. //Cria um node que guarda os valores que são enfileirados no deque
  4. node_t*  node_new     (int value){
  5.     node_t* new_node = (node_t*) malloc(sizeof(node_t));
  6.     new_node->value = value;
  7.     return new_node;
  8. }
  9.  
  10. //Cria um deque dinamicamente e retorna seu endereço de memoria
  11. deque_t* construct    (){
  12.     deque_t* new_deque = (deque_t*) malloc(sizeof(deque_t));
  13.     new_deque->front = NULL;
  14.     new_deque->rear = NULL;
  15.     new_deque->size = 0;
  16.     return new_deque;
  17. }
  18. //Libera a memória do conteúdo e do próprio deque
  19. void     destruct     (deque_t *deque){
  20.     erase(deque);
  21.     free(deque);
  22. }
  23.  
  24. //Retorna o tamanho do deque
  25. int      size         (deque_t *deque){
  26.     return deque->size;
  27. }
  28. //Retorna verdadeiro se o deque esta vazio, caso contrário, retorna falso
  29. bool     empty        (deque_t *deque){
  30.     return (deque->size == 0);
  31. }
  32.  
  33. //Retorna o valor da frente da lista, retorna int_min quando a lista estiver vazia
  34. int      front        (deque_t *deque){
  35.      if (empty(deque)) return INT_MIN;
  36.      return deque->front->value;
  37. }
  38. //Retorna o valor do fim da lista, retorna int_min quando a lista estiver vazia
  39. int      rear         (deque_t *deque){
  40.     if (empty(deque)) return INT_MIN;
  41.     return deque->rear->value;
  42. }
  43.  
  44. //Cria um nó que guarda um valor e o adiciona ao fim do deque
  45. void     enqueue_rear (deque_t *deque, int value){
  46.     node_t* new_node = node_new(value);
  47.     new_node->next = NULL;
  48.     new_node->prev = deque->rear;
  49.     if(deque->rear != NULL) deque->rear->next = new_node;
  50.     deque->rear = new_node;
  51.     if(deque->front == NULL) deque->front = new_node;
  52.     deque->size++;
  53. }
  54. //Cria um nó que guarda um valor e o adiciona ao inicio do deque
  55. void     enqueue_front(deque_t *deque, int value){
  56.     node_t* new_node = node_new(value);
  57.     new_node->next = deque->front;
  58.     new_node->prev = NULL;
  59.     if(deque->front != NULL) deque->front->prev = new_node;
  60.     deque->front = new_node;
  61.     if(deque->rear == NULL) deque->rear = new_node;
  62.     deque->size++;
  63. }
  64. //Retira o valor do final caso não esteja vazia
  65. void     dequeue_rear (deque_t *deque){
  66.     if (empty(deque)) return;
  67.     node_t* temp = deque->rear;
  68.     if(deque->rear->prev != NULL) deque->rear->prev->next = NULL;
  69.     deque->rear = deque->rear->prev;
  70.     free(temp);
  71.     deque->size--;
  72. }
  73. //Retira o valor da frente caso não esteja vazia
  74. void     dequeue_front(deque_t *deque){
  75.     if (empty(deque)) return;
  76.     node_t* temp = deque->front;
  77.     if(deque->front->next != NULL) deque->front->next->prev = NULL;
  78.     deque->front = deque->front->next;
  79.     free(temp);
  80.     deque->size--;
  81. }
  82. //Limpa o conteudo do deque(deixa ele vazio)
  83. void     erase        (deque_t *deque){
  84.     node_t* temp = deque->front;
  85.     while (temp != NULL){
  86.         //printf("Deleting node [%d]\t-\t", temp->value);
  87.         dequeue_front(deque);
  88.         //printf("Node deleted, %d nodes left.\n", deque->size);
  89.         temp = deque->front;
  90.     }
  91. }
  92. //Imprime o deque em uma unica linha, com os elementos separados por um espaço,
  93. //terminando com um \n, lembrando de respeitar os conceitos de fila.
  94. void     print        (deque_t *deque){
  95.     node_t* temp = deque->front;
  96.     while (temp != NULL){
  97.         printf("%d", temp->value);
  98.         if (temp->next != NULL) printf(" ");
  99.         temp= temp->next;
  100.     }
  101.     printf("\n");
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement