int interface_stdin( void ) { no *T = malloc(sizeof(no)); if ( T ) inicializada(T) = 0; char c; /* comando dentre {i, r, b} */ int v, /* parametro da {insercao, remocao, busca} */ i=0, j=0; /* controle do buffer, para nao repetir strings * i: indica numero de comandos {i, r, b} chamados, * j: indica o numero de impressoes. * Portanto, sempre deve valer i=j. */ do { scanf("%c", &c); switch (c) { case 'i': scanf("%d", &v); T = inserir(T, v); i++; /* um comando executado implica i <- i + 1, * comentarios posteriormente suprimidos. */ break; case 'r': scanf("%d", &v); T = balancia(remover(T, v)); i++; break; case 'b': scanf("%d", &v); i++; break; } if ( c == 'i' || c == 'r' || c == 'b' ) printf("%c %d\n", c, v); /* j eh o numero de iteracoes, que deve ser concordante com i, * senao, j sera decrementado posteriormente e nada sera impresso. */ j++; /* previne impressoes duplicadas. */ if ( i != j ) j--; /* Se o comando for {insercao, remocao}, imprime a arvore */ else if ( c != 'b' ) { escreve(T, PRE_ORDER); printf("\n"); /* Se o comando for de busca, imprime os no's percorridos. */ } else imprime_lista(busca(T, calloc(AVL_ALTURA_MAX, sizeof(int)), v)); } while ( c != 'q' && !feof(stdin) ); finaliza(T); /* Destroi T. */ return EXIT_SUCCESS; }
int main() { Lista*lst = inicializada(); //Inicializa NULL Lista*end1 = inicializada(); //Inicializa NULL int valor_digitado, valor_retira,n; lst=insere_ordenado(lst,18); //Insere em ordem os valores imprime(lst); //imprime o valor lst=insere_ordenado(lst,90); imprime(lst); lst=insere_ordenado(lst,47); imprime(lst); printf("Digite uma numero:"); scanf("%d",&n); lst=insere_ordenado(lst, n); imprime(lst); printf("Entre com um numero para busca: \n"); scanf("%d",&valor_digitado); end1 = busca(lst,valor_digitado); // Busca endereço do numero digitado if(end1 != NULL) printf("O valor se encontra no endereço %p.\n",end1); else printf("Numero nao encontrado.\n"); printf("Entre com o numero para retirar: "); scanf("%d",&valor_retira); retira(lst,valor_retira); // Retira o numero digitado imprime(lst); libera(lst); // libera a lista lst=NULL; // igual lista à NULL imprime(lst); return 0; }
int interface_arquivo(FILE *fp) { if ( !fp ) return EXIT_FAILURE; no *T = malloc(sizeof(no)); if ( T ) inicializada(T) = 0; char comando, /* comando dentre {i, r, b} */ *linha = malloc(256 * sizeof(char)); /* linha que contem o `comando' e o `valor' */ int valor; /* parametro do comando */ do { fgets(linha, 16, fp); if ( !interpreta_linha(linha, &comando, &valor) || feof(fp) ) comando = 'q'; if ( comando != 'q' ) printf("%c %d\n", comando, valor); switch (comando) { case 'i': T = inserir(T, valor); break; case 'r': T = balancia(remover(T, valor)); break; /* Comando `b' (busca) eh tratado posteriormente ao final da iteracao, * pois a arvore nao eh impressa. */ } if ( comando != 'q' && comando != 'b' ) { /* Se o comando nao for para sair, imprime a lista */ escreve(T, PRE_ORDER); printf("\n"); } else if ( comando == 'b' ) /* Se o comando for de busca, imprime os no's percorridos. */ imprime_lista(busca(T, calloc(AVL_ALTURA_MAX, sizeof(int)), valor)); } while ( comando != 'q' ); finaliza(T); /* Destroi T. */ return EXIT_SUCCESS; }