Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
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");
}
Esempio n. 4
0
/* 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;
}
Esempio n. 5
0
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();
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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;
}