Ir ao conteúdo
  • Cadastre-se

dionatandiego11

Membros Juniores
  • Total de itens

    1
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

0

Informações gerais

  • Cidade e Estado
    Belo Horizonte
  • Sexo
    Masculino
  1. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tNo { void *dado; struct tNo *proximo; } No; typedef struct tLista{ No *cabeca; No *ultimo; int tamanho; }Lista; Lista * cria() { Lista *l; l = malloc(sizeof(Lista)); if(l == NULL){ exit(1);} l->cabeca = malloc(sizeof(No)); if(!l->cabeca) { exit(1); } l->ultimo = l->cabeca; l->tamanho = 0; l->cabeca->proximo = NULL; return l; } void insere_inicio(Lista *l, void *dado) { No *novo; novo = malloc(sizeof(No)); if(novo == NULL) { exit(1); } novo->dado = dado; if (l->cabeca->proximo == NULL){ l->ultimo = novo; } novo->proximo = l->cabeca->proximo; l->cabeca->proximo = novo; l->tamanho += 1; } void * remove_inicio(Lista *l) { No *primeiro = l->cabeca->proximo; if(primeiro == NULL) { printf("Lista vazia.\n"); return NULL; } l->cabeca->proximo = primeiro->proximo; l->tamanho -= 1; void * dado = primeiro->dado; if(primeiro == l->ultimo){ l->ultimo = l->cabeca; } free(primeiro); return dado; } void destroi(Lista *f) { No *liberar; while(f->cabeca->proximo) { liberar = f->cabeca; free(liberar->dado); f->cabeca = f->cabeca->proximo; free(liberar); } free(f->cabeca); free(f); } void * remove_final(Lista *l){ No *ultimo = l->ultimo; void *dado; if(ultimo == l->cabeca) { printf("Lista vazia.\n"); return NULL; }else //Verifica se existe apenas um elemento if(ultimo == l->cabeca->proximo){ dado = ultimo->dado; l->cabeca->proximo = NULL; l->ultimo = l->cabeca; }else //Busca o penultimo elemento { No *penultimo = l->cabeca->proximo; while(penultimo != NULL){ if(penultimo->proximo == ultimo) break; penultimo = penultimo->proximo; } penultimo->proximo = NULL; l->ultimo = penultimo; l->tamanho -= 1; dado = ultimo->dado; } free(ultimo); return dado; } typedef struct tAeroporto{ char codigo[4]; char nome[100]; Lista * voos; } Aeroporto; typedef struct tVoo{ Aeroporto * destino; int codigo; } Voo; Aeroporto * buscaAeroporto(Lista *l,char codigo[4]){ No *n; n = l->cabeca->proximo; Aeroporto *a; while(n!=NULL){ a = (Aeroporto *) (n->dado); if( strcmp(a->codigo,codigo) == 0 ) return a; n = n->proximo; } return NULL; } No * buscaVoo(Lista *l,int codigo){ No *n; n = l->cabeca->proximo; Voo *v; while(n!=NULL){ v = (Voo *) (n->dado); if( v->codigo == codigo ) return n; n = n->proximo; } return NULL; } int remove_voo(Lista *l, int codigo){ No *remover = buscaVoo(l,codigo); if(remover == NULL){ return 0; }else if(l->ultimo == l->cabeca) { return 0; }else //Verifica se esta no inicio if(l->cabeca->proximo == remover){ remove_inicio(l); }else //Verifica se esta no final if(l->ultimo == remover){ remove_final(l); }else //Remove do meio da lista { No *anterior = l->cabeca->proximo; while(anterior != NULL){ if(anterior->proximo == remover) break; anterior = anterior->proximo; } anterior->proximo = remover->proximo; l->tamanho -= 1; free(remover); } return 1; } void imprimeAeroporto(Lista *l){ No *n; printf("\nMen\t\tDado\tProximo\n"); printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo); Aeroporto *a; for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){ a = (Aeroporto *)n->dado; printf("%p\t%s\t%p\n",n, a->codigo,n->proximo); } printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo); printf("\n"); } void imprimeVoos(Lista *l){ No *n; printf("\nMen\t\tDado\tProximo\n"); printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo); Voo *a; for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){ a = (Voo *) n->dado; printf("%p\t%d\t%p\n",n, a->codigo,n->proximo); } printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo); printf("\n"); } int CadastraAeroporto(Lista * l, char * Cidade, char * Codigo){ Aeroporto *a; a = malloc(sizeof(Aeroporto)); if(a == NULL) return 0; strcpy(a->codigo,Codigo); strcpy(a->nome,Cidade); a->voos = cria(); insere_inicio(l,(void *) a); return 1; } int CadastraVoo(Lista *l,int NumVoo, char * CodigoOrigem, char * CodigoDestino){ //Cadastra um Voo com um determinado número entre dois aeroportos identificados pelos seus Codigos. } int RemoveVoo(Lista *l,int NumVoo){ //Remove um Voo indicado pelo número. } // Função para exibir o menu de opções // Note que retorna um valor int, que é o // número digitado pelo usuário. int menu() { int opcao; printf("\n\n ==== MENU DE opções ====\n"); printf("1 - Procura Voo \n"); printf("2 - Cadastra Aeroporto \n"); printf("3 - Imprime Voos \n"); printf("4 - Cadastra Voo \n"); printf("5 - Remove Voo \n"); printf("6 - Procura Voo \n"); printf("7 - Imprime Tudo \n"); printf("8 - SAIR \n"); printf("\nO que deseja fazer? "); scanf("%d", &opcao); return opcao; } int main(int argc, char * argv[]){ int opcao_selecionada; Lista *aeroportos; aeroportos = cria(); int cod; char codigoA[4]; char nomeA[100]; int codigoV; char origem[4]; char destino[4]; do{ opcao_selecionada = menu(); scanf("%d",&cod); switch(opcao_selecionada){ case 1: buscaVoo(); break; case 2: CadastraAeroporto(); break; break; case 3: imprimeVoos(); break; case 4: CadastraVoo(); break; case 5: RemoveVoo(); break; case 6: buscaVoo(); break; case 7: imprimeVoos(); break; case 8: break; } }while(cod != 0); imprimeAeroporto(aeroportos); //Imprimrir Voos //Aeroporto *a = buscaAeroporto(aeroportos,"CNF"); //imprimeVoos(a->voos); destroi(aeroportos); return 0; } Tudo bem galera? Criei algumas funções (nó) e não sei como criar um link com int main, ajuda alguém?! desep.txt

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×