int main() { char seq[TAM_BUF]; int n, i, c; Pilha *pil; pil = pilha_cria(); printf("Nao insira espacos para a sequencia a seguir!\n"); printf("Entre com a sequencia de parenteses e chaves: "); n = scanf("%s", seq); if (n == 0) { printf("A sequencia esta vazia!\n"); goto saida; } else { for (i = 0; seq[i] != '\0'; i++) { switch(seq[i]) { case '(': pilha_push(pil, '('); break; case '{': pilha_push(pil, '{'); break; case ')': if (pilha_vazia(pil)) goto mal_formada; c = pilha_pop(pil); if (c != '(') goto mal_formada; break; case '}': if (pilha_vazia(pil)) goto mal_formada; c = pilha_pop(pil); if (c != '{') goto mal_formada; break; default: printf("Erro, caracter invalido: %c\n", seq[i]); goto saida; break; } } } if (pilha_vazia(pil)) { printf("A sequencia eh bem-formada!\n"); goto saida; } mal_formada: printf("A sequencia eh mal-formada!\n"); saida: pilha_libera(pil); return 0; }
int pilha_remove(pilha *p, const char* string) { /* problema 1.2 - a implementar */ int tamanho = p->tamanho, i; pilha *paux = pilha_nova(); while(p->tamanho!=0){ pilha_push(paux, pilha_top(p)); pilha_pop(p); } while(paux->tamanho!=0){ if(strcmp(pilha_top(paux), string)!=0) pilha_push(p, pilha_top(paux)); pilha_pop(paux); } return 1; }
void desembarque(Pilha* p){ Fila* f = getfila(); while(!pilha_vazia(p)){ Mala* m = pilha_pop(p); fila_insere(f,m); } imprime_fila(f); pilha_libera(p); fila_libera(f); printf("\nDesembarque Realizado com Sucesso!\n"); }
/* Funcao de fechamento de uma Matrioshka */ int MatrioshkasPop(Pilha *matrioshka, int valor){ /* Caso sobre uma Matrioshka aberta, ou o valor nao eh o certo para fechar, * Matrioshka invalida */ if(matrioshka->prox == NULL || matrioshka->prox->tamanho != (-1)*(valor)){ return 0; } /* Retira as Matrioshkas validas */ pilha_pop(matrioshka); /* Processo realizado sem cair nos casos invali+dos */ return 1; }
int main(){ Pilha* p=NULL; int op; char resp; float valor; do{ system("cls"); printf("==PILHAS VETORIAIS >> FELIPE==\n\n"); printf("Escolha uma opcao:\n"); printf("1 - Cria a pilha\n"); printf("2 - Testa se a pilha esta vazia\n"); printf("3 - Adiciona um elemento a pilha\n"); printf("4 - Retira um elemento da pilha\n"); printf("5 - Exibe a pilha\n"); printf("6 - SAIR [X]\n\n"); printf("Escolha: "); scanf("%d",&op); switch(op){ case 1: p=pilha_cria(); printf("Pilha criada no endereco %p",p); break; case 2: if(pilha_vazia(p)){ printf("A pilha esta VAZIA"); } else{ printf("A pilha NAO ESTA VAZIA"); } break; case 3: printf("Digite um valor real:"); scanf("%f",&valor); pilha_push(p,valor); break; case 4: pilha_pop(p); break; case 5: pilha_imprime(p); break; case 6: exit(1); } printf("\n\nDeseja continuar? (s/n) :"); scanf("%s",&resp); }while(resp=='s'); getch(); }
pilha* fila_transforma(fila *f) { /* problema 1.1 - a implementar */ int i=0; pilha *paux = pilha_nova(); pilha *p = pilha_nova(); while(fila_comprimento(f)!=0){ pilha_push(paux, fila_front(f)); fila_pop(f); i++; } while(p->tamanho!=i){ pilha_push(p, pilha_top(paux)); pilha_pop(paux); } return p; }
int main() { /* teste problema 1.1 */ { vetor *v; pilha *res; int i; char data[][11] = {"Estocolmo", "Oslo", "Helsinquia", "Copenhaga", "Reykjavik"}; printf("* Problema 1.1 *\n"); v = vetor_novo(); for(i=0; i<5; i++) vetor_insere(v, data[i], -1); printf("Vetor: "); for(i=0; i<v->tamanho; i++) printf("%s ", vetor_elemento(v, i)); printf("\n"); res = vetor_pilha(v); printf("Pilha: "); if(res) { while(!pilha_vazia(res)) { printf("%s ", pilha_top(res)); pilha_pop(res); } } printf("\n"); if(v->tamanho != 5) printf("ERRO: Vetor original nao deve ser alterado!\n"); else { for(i=0; i<5; i++) if(strcmp(data[i], vetor_elemento(v, i)) != 0) { printf("ERRO: Vetor original nao deve ser alterado!\n"); break; } } vetor_apaga(v); pilha_apaga(res); } printf("\n"); /* teste problema 1.2 */ { int res, i, ok; objeto obj; char data[][20] = { "Paul Atreides", "Leto Atreides", "Voran Atreides", "Vladimir Harkonnen", "Dmitri Harkonnen", "Hundro Moritani" }; tabela_dispersao td1, td2; printf("* Problema 1.2 *\n"); td1 = tabela_cria(11, hash_djbm); td2 = tabela_cria(7, hash_djbm); for(i=0; i<6; i++) { strcpy(obj.chave, data[i]); strcpy(obj.valor, data[i]); tabela_adiciona(td1, &obj); tabela_adiciona(td2, &obj); } res = tabela_redimensiona(td1, 7); if(td1->tamanho == 7) { elemento *aux1, *aux2; for(i=0; i<td1->tamanho; i++) { aux2 = td2->elementos[i]; while(aux2 != NULL) { ok = 0; aux1 = td1->elementos[i]; while(aux1 != NULL) { if(strcmp(aux1->obj->chave, aux2->obj->chave) == 0) { ok = 1; break; } aux1 = aux1->proximo; } if(!ok) { printf("ERRO: Elemento %s em posicao errada\n", aux2->obj->chave); break; } aux2 = aux2->proximo; } } if(ok) printf("Tabela de dispersao redimensionada corretamente.\n"); } else printf("ERRO: Tabela de dispersao deveria ter novo tamanho.\n"); tabela_apaga(td1); tabela_apaga(td2); printf("\n"); } /* teste problema 1.3 */ { int i; arvore_avl *avl; lista *res, *indicacoes; char data[][20] = { "prog2", "mt2", "trabalho", "e'", "muito", "zzzz...", "dificil", "facil", "nada", "verdade"}; avl = avl_nova(); printf("* Problema 1.3 *\n"); for(i=0; i<10; i++) avl_insere(avl, data[i]); indicacoes = lista_nova(); lista_insere(indicacoes, "esquerda", -1); lista_insere(indicacoes, "esquerda", -1); lista_insere(indicacoes, "direita", -1); res = descobre_segredo(avl, indicacoes); printf("Segredo: "); if(res) { for(i=0; i<res->tamanho; i++) printf("%s ", lista_elemento(res, i)); } printf("\n\nSegredo (impl. recursiva): "); descobre_segredo_recurs(avl->raiz, indicacoes); avl_apaga(avl); lista_apaga(indicacoes); lista_apaga(res); printf("\n\n"); } return 0; }