int main(){ TDelimitador *fila=NULL; TElem *elem; int op; do{ menu(); scanf("%d",&op); switch(op){ case 1: int num; puts("Digite um identificador para enfileirar: "); scanf("%d",&num); Enfileira(fila,num); break; case 2: elem=Desenfileira(fila); printf("\nElemento Desinfileirado: %d",elem->Id); break; case 3: Esvazia(fila); Vazia(fila); break; default:op=0; break; } }while(op!=0); return 0; }
int AdjacenteColorido(TipoLista ListaAdjacentes, TipoLista ListaColoridos){ TipoApontador AuxAdjacentes, AuxColoridos; AuxAdjacentes = ListaAdjacentes.Primeiro; AuxColoridos = ListaColoridos.Primeiro; if(!Vazia(ListaColoridos) || !Vazia(ListaAdjacentes)){ while(AuxAdjacentes->Prox!=NULL){//ENQUANTO TIVER ADJACENTES while(AuxColoridos->Prox!=NULL){//ENQUANTO TIVER VERTICES COLORIDOS COM A COR C if(AuxColoridos->Prox->Item.Vertice == AuxAdjacentes->Prox->Item.Vertice) return TRUE; AuxColoridos = AuxColoridos->Prox; } AuxAdjacentes = AuxAdjacentes->Prox; AuxColoridos = ListaColoridos.Primeiro; } } return FALSE; }
void Retira(TipoApontador p, TipoLista *Lista, TipoItem *Item){ TipoApontador q; if (Vazia(*Lista) || p == NULL || p->Prox == NULL) { printf("Erro: Lista vazia ou posicao nao existe\n"); return; } q = p->Prox; *Item = q->Item; p->Prox = q->Prox; if (p->Prox == NULL) Lista->Ultimo = p; free(q); }
void Retira(TipoApontador p, TipoLista *Lista, TipoItem *Item){ /*--Obs.: item a ser retirado e o seguinte ao apontado por p--*/ TipoApontador q; if (Vazia(*Lista) || p == NULL || p->Prox == NULL) { printf("Erro: Lista vazia ou posicao nao existe\n"); return; } q = p->Prox; *Item = q->Item; p->Prox = q->Prox; if (p->Prox == NULL) Lista->Ultimo = p; free(q); }
void ConverteGrafo(TipoGrafo * Grafo, int * vertices){ int i; TipoApontador Aux; for(i=0;i<Grafo->NumVertices;i++){ if(!Vazia(Grafo->Adj[i])){//SE A LISTA DE ADJACENTES NÃO FOR VAZIA Aux = Grafo->Adj[i].Primeiro; while(Aux->Prox!=NULL){//ENQUANTO HOUVER ADJACENTES Aux->Prox->Item.Vertice = vertices[Aux->Prox->Item.Vertice];//CORRIGE ADJACENTES DE ACORDO COM O VETOR VERTICES Aux = Aux->Prox; } } } }
int Desenfileira(TipoFila *Fila, TipoItem *item) { if(Vazia(Fila)) return 0; Apontador Aux = Fila->frente->Prox; *item = Aux->carro; Fila->frente->Prox = Aux->Prox; Fila->frente->Prox->Ant = Fila->frente; if(Fila->frente->Prox == Fila->frente) Fila->frente = Fila->tras; free(Aux); Fila->tamanho = Fila->tamanho - 1; return 1; }
TElem *Consulta(TDelimitador *fila){ TElem *elem=NULL; if(!Vazia(fila)){ elem=fila->Fin; return elem; }else{ } }
void Imprime_E(TipoFila Fila) { if(Vazia(&Fila)){ printf("Fila de espera vazia"); return; } Apontador aux; aux = Fila.frente->Prox; printf("| Ant Chave Prox | \n\n"); while (aux != Fila.frente) { printf("%s %s %s\n", aux->Ant->carro.placa, aux->carro.placa, aux->Prox->carro.placa); aux = aux->Prox; } }
void ImprimeGrafo(TipoGrafo *Grafo){ int i; TipoApontador Aux; for (i = 0; i < Grafo->NumVertices; i++) { printf("Vertice%2d: ", i); if (!Vazia(Grafo->Adj[i])) { Aux = Grafo->Adj[i].Primeiro->Prox; while (Aux != NULL) { printf("%3d ", Aux->Item.Vertice); Aux = Aux->Prox; } } putchar('\n'); } }
int fila_de_espera(TipoFila *Fila, TipoItem *carro, int op) { switch (op) { case CHEGADA: Enfileira(*carro, Fila); return 1; case SAIDA: if (Vazia(Fila)) return 0; Desenfileira(Fila,carro); return 1; default: return 0; } return 0; }
Apontador Pesquisa(TipoVariavel Ch, TipoPeso p, TipoTabela T) { Indice i; Apontador Ap; i = h(Ch, p); if (Vazia(T[i])) return NULL; /* Pesquisa sem sucesso */ else { Ap = T[i].Primeiro; while (Ap->Prox->Prox != NULL && strncmp(Ch, Ap->Prox->Item.Variavel, sizeof(TipoVariavel))) Ap = Ap->Prox; if (!strncmp(Ch, Ap->Prox->Item.Variavel, sizeof(TipoVariavel))) return Ap; else return NULL; /* Pesquisa sem sucesso */ } }
void estacionamento(ESTAC *estac,TipoFila *espera,TipoItem *carro,int operacao){ switch (operacao) { case CHEGADA: if(!estacionar(estac,carro)) fila_de_espera(espera,carro,CHEGADA); break; case SAIDA: retirar_carro(estac,carro->placa); if(!Vazia(espera)){ fila_de_espera(espera,carro,SAIDA); estacionar(estac,carro); } break; default: break; } }
TElem *Desenfileira(TDelimitador *fila){ TElem *elem=NULL; if(!Vazia(fila)){ elem = fila->Ini; fila->Ini->Prox->Ant = fila->Fin; fila->Fin->Prox = fila->Ini->Prox; fila->Ini = fila->Ini->Prox; fila->qnt -= 1; if(fila->qnt <= 0){ Esvazia(fila); } return elem; }else{ return elem; } }
bool Enfileira(TDelimitador *fila, int num){ TElem *elem; long int end; puts("Digite o endereco:"); fflush(stdin); scanf("%li", &end); elem = (TElem *) malloc(sizeof(TElem)); if(!Vazia(fila)){ if(!Cheia(fila)){ elem->Prox = fila->Ini; elem->Id=num; elem->End = end; elem->tam = sizeof(TElem); elem->Ant = fila->Fin; fila->Fin->Prox = elem; fila->Fin = elem; fila->qnt += 1; return true; }else{ return false; } }else{ puts("Fila Iniciada!"); elem->Prox = NULL; elem->Ant = NULL; elem->Id = num; elem->End = end; elem->tam = sizeof(TElem); fila->Ini = elem; fila->Fin = elem; fila->qnt = 1; return true; } }
void EsvaziaLista(TipoLista * Lista){ TipoItem x; while(!Vazia(*Lista)){ Retira(Lista->Primeiro, Lista, &x); } }