Exemple #1
0
// moverAcima: move o bloco A para o 
// acima do bloco B, retornando à
// posição inicial os demais blocos sobre
// o bloco B
void moverAcima(int a, int b, int retornoA, int retornoB, tPilha p[]){
	int valorA, valorB, valorAux;

	if(acessaTopo(&valorA, (p + retornoA)) && valorA == a){
		desempilhar(&valorA, (p + retornoA));
		//verifica o topo do bloco B
		if(acessaTopo(&valorB, (p + retornoB)) && valorB == b){
			empilhar(valorA, (p + retornoB));
		}else{
			while(acessaTopo(&valorB, (p + retornoB)) && valorB != b){
				desempilhar(&valorAux, (p + retornoB));
				empilhar(valorAux, (p + valorAux));
			}
			empilhar(valorA, (p + retornoB));
		}
	}else{
		while(acessaTopo(&valorA, (p + retornoA)) && valorA != a){
			desempilhar(&valorAux, (p + retornoA));
			empilhar(valorAux, (p + valorAux));
		}
		desempilhar(&valorA, &p[retornoA]);
		//verifica o topo do bloco B
		if(acessaTopo(&valorB, (p + retornoB)) && valorB == b){
			empilhar(valorA, (p + retornoB));
		}else{
			while(acessaTopo(&valorB, (p + retornoB)) && valorB != a){
				desempilhar(&valorAux, (p + retornoB));
				empilhar(valorAux, (p + valorAux));
			}
			empilhar(valorA, (p + retornoB));
		}
	}
	printf("\n\t\tMOVER %d ACIMA %d",a, b);
}
int main(void){
    Pilha p;
    Pilha p2;
    int escolha = -1, valor = 1000, removido= -1;

     while ((escolha = menu())!= 0){
        switch (escolha){
        case 1:
            inicializa_pilhas(&p, &p2); break;
        case 2:
            do{
                if(valor < 1)
                    system("clear");
                printf("Informe um valor inteiro positivo que deseja inserir\n");
                scanf("%d", &valor); }while(valor < 1);

            empilhar(&p, valor); break;
        case 3:
            do{
                if(valor < 1)
                    system("clear");
                printf("Informe um valor inteiro positivo que deseja inserir\n");
                scanf("%d", &valor); }while(valor < 1);

            empilhar(&p2, valor); break;

        case 4:
            removido = desempilhar(&p);

            if(removido != -1 && removido != 0){
                printf("Valor removido: %d\n", removido);
                printf("--------------------------------------------------------\n");
            }
            break;
        case 5:
            removido = desempilhar(&p2);

            if(removido != -1 && removido != 0){
                printf("Valor removido: %d\n", removido);
                printf("--------------------------------------------------------\n");
            }
            break;
        case 6:
            acessar_topo(&p); break;
        case 7:
            acessar_topo(&p2); break;
        case 8:
            imprimir_elementos(&p); break;
        case 9:
            imprimir_elementos(&p2); break;
        case 10:
            comparar_pilhas(&p,&p2); break;
        }
    }
    return 0;
}
Pilha* empilharExpressaoOperador(Pilha* p, char* operador){
    if(tamanhoPilha(p) > 1){
        Arvore* primeiro, *segundo;
        Pilha* pilha;
        primeiro = getArvoreTopoPilha(p);
        p = desempilhar(p);
        segundo = getArvoreTopoPilha(p);
        p = desempilhar(p);
        Arvore* arvoreOperador = inicializaArvore(TIPO_LITERAL, operador, NULL, NULL);
        arvoreOperador = setFilhosEsquerdaCentroDireita(arvoreOperador, primeiro, segundo, NULL);
        p = empilhar(p, arvoreOperador);
    }
    return p;
}
int main()
{ 
  	int opcao;
  	
  	TPilha pilha;
  	
  	inicializaPilha(&pilha);

    do 
    { 
         printf("\nOpcoes: \n\n");
         printf(" 1 - Empilhar dado \n");
         printf(" 2 - Desempilhar dado \n");
         printf(" 3 - Apresentar dados \n");
         printf(" 0 - para sair \n\n");
         printf("Entre com a sua opcao: ");
         scanf("%d", &opcao); /* Le a opcao do usuario */
         switch (opcao)
         { 
                case 1: empilhar(&pilha); break;
                case 2: desempilhar(&pilha); break;
                case 3: apresentarPilha(&pilha); break;
				        case 0: break;
                default: printf("\n\n Opcao invalida"); getch(); break;
         }
    } while (opcao != 0);
}
void esvazie(Pilha *p){
    int i;

    system("cls");
    for(i=p->topo; i>=0; i--)
        desempilhar(p);
}
Exemple #6
0
// moverTopo: move o bloco A para o topo
// onde o bloco B esta, remove todos
// os blocos sobre o bloco A, retornando-os
// as posições iniciais
void moverTopo(int a, int b, int retornoA, int retornoB, tPilha *p){	
	int valorA, valorB, valorAux;

	if(acessaTopo(&valorA, (p + retornoA)) && valorA == a){
		desempilhar(&valorA, (p + retornoA));
		empilhar(valorA, (p + retornoB));
	}else{
		//verifica o valor do topo do bloco A
		while(acessaTopo(&valorA, &p[retornoA]) && valorA != a){
			desempilhar(&valorAux, &p[retornoA]);
			empilhar(valorAux, (p + valorAux));
		}
		desempilhar(&valorA, (p + retornoA));
		empilhar(valorA, (p + retornoB));
	}
	printf("\n\t\tMOVER %d TOPO %d", a, b);
}
Exemple #7
0
int mover(Pilha * origem, Pilha * destino){    
    if(tamanho(origem) > 0 && (tamanho(destino) <= 0 || topo(origem) < topo(destino))){
        empilhar(destino,desempilhar(origem));
        return 1;
    }
    else {
        printf("Nao e possivel fazer este movimento.\n");
        return 0;
    }
}
void esvazie(Pilha *p){
    int i;

    for(i=0; i<MAX_PILHA; i++)
        p->vet[i] = 0;

    for(i=p->topo-1; i>=0; i--)
        p->vet[i] = desempilhar(p);
    system("clear");

    printf("valores removidos:\n");
    for(i=0; i<MAX_PILHA;i++){
        if(p->vet[i] != 0)
            printf("|%d|\n", p->vet[i]);
    }
}
Exemple #9
0
int main() {
	struct pilha *minha_pilha;
	int tamanho;

	minha_pilha = criar();
	empilhar(minha_pilha, 'a');
	empilhar(minha_pilha, 'b');
	empilhar(minha_pilha, 'c');
	tamanho = tamanho_pilha(minha_pilha);
	printf("Desempilhando elementos \n");
	for (int i = 0; i < tamanho; i++) {
		printf("%c \n", desempilhar(minha_pilha));
	}
	destruir(minha_pilha);

	return 0;
}
int main( void )
{
	char word[ 50 ];

	printf( "Digite uma palavra : " );
	scanf( "%s", word );

    int i, j;

    printf( "Empilhando...\n" );
    for( i = strlen( word )-1, j = 0; i > -1; i-=1, j++ )
        empilhar( word[ i ], j );

    printf( "Desempilhando...\n" );
    for( i = 0; i < strlen( word ); i++ )
        desempilhar();
}
Exemple #11
0
int main(){
	int i;

	PILHA_DINAMICA pilha;

	for (i = 0; i < 5; i++){
		ITEM item;
		item.valor = i;
		
		if (empilhar(&pilha, &item)){
			printf("Entrou na pilha: %d", item.valor);
		}
		else {
			printf("%d: Erro na alocação.\n", item.valor);
		}
	}
	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	ITEM item1;
	item1.valor = 100;

	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	frente(&pilha, &item1);

	printf("Elemento do topo: %d\n--\n, item1.valor");

	if (desempilhar(&pilha, &item1)){
		printf("Saiu na pilha: %d", item.valor);
	}
	else {
		printf("Pilha vazia.\n", item1.valor);
	}

	item1.valor = 9;
	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	return 0;
}