int fila_push(fila *f, const char *string) { filaItem *novo, *ult = f->cauda; if(f == NULL || string == NULL) return FILA_ERRO; if (fila_cheia(f)) return FILA_CHEIA; novo = (filaItem *) malloc(sizeof(filaItem)); if(novo == NULL) return FILA_ERRO; novo->string = (char*) calloc(strlen(string)+1, sizeof(char)); if(novo->string == NULL) { free(novo); return FILA_ERRO; } strcpy(novo->string, string); novo->proximo = NULL; if (ult == NULL) f->cabeca = f->cauda = novo; else { f->cauda->proximo = novo; f->cauda = novo; } return FILA_OK; }
void chegada (char x, fila *f) { char aux; if (fila_cheia(f)) /* ou if (f->tam >= TAM_BUFFER)*/ {partida ( &aux ,f); printf("\n Buffer estava cheio => ocorreu uma partida de:: %c ", aux); } /* apos a partida... ha uma nova entrada */ printf("\n O lugar vago no Buffer foi ocupado por:: %c ", x ); f-> tam = ( ( f -> tam) + 1 ); f-> rear =( ( f->rear) + 1 ) % MAX_VETOR; f-> entradas [f->rear] = x ; return; }
void inserir_fila(Fila *p, Arv *v) { if(fila_cheia(p)==0) { int fim = (p->ini+p->qtde)%MAX; p->v[fim] = v; p->qtde++; } else { printf("\nFila Cheia!\n"); } }
int inserir(Fila *f, void *info, float (*compara_info)(void*,void*)) { if(fila_cheia(*f)) return ERRO_FILA_CHEIA; int atual = f->fim; int anterior = ant(atual, f->capacidade); int cont = 0; while (cont < f->num_ele && compara_info(f->dados[anterior],info)) { f->dados[atual] = f->dados[anterior]; atual = anterior; anterior = ant(atual, f->capacidade); cont++; } f->dados[atual] = malloc (f->tamInfo); memcpy(f->dados[atual], info, f->tamInfo); f->fim++; f->num_ele++; if (f->fim == f->capacidade) f->fim = 0; return 0; }