// 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); }
// 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); }
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]); } }
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(); }
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; }