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; }
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; }
Pilha* embarque(int n){ int i; Pilha* p = getpilha(); for(i = 0; i <n; i++){ Mala* m = cadastra_mala(); pilha_push(p,m); } printf("\nEmbarque Realizado com Sucesso!\n"); return p; }
/* teste problema 1.2 */ void teste_12() { pilha *p; p = pilha_nova(); pilha_push(p, "P4"); pilha_push(p, "P3"); pilha_push(p, "P1"); pilha_push(p, "P3"); pilha_push(p, "P2"); pilha_push(p, "P1"); printf("Antes de pilha_remove: "); imprime_pilha(p); pilha_remove(p, "P1"); printf("Depois de pilha_remove: "); imprime_pilha(p); pilha_remove(p, "P3"); printf("Depois de pilha_remove: "); imprime_pilha(p); pilha_apaga(p); }
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(); }
/* Funcao de abertura de uma nova Matrioshka */ int MatrioshkasPush(Pilha *matrioshka, int valor){ /* Caso nao seja o fim da pilha ou o módulo da externa menor que o da interna, * Matrioshka invalida */ if(matrioshka->prox != NULL && valor < matrioshka->prox->tamanho){ return 0; } /* Entra na pilha */ pilha_push(matrioshka, valor); /* Caso nao seja a penultima */ if(matrioshka->prox->prox != NULL){ /* Soma o tamanho das Matrioshkas internas */ matrioshka->prox->prox->contador += matrioshka->prox->tamanho; /* Soma das internas eh maior ou igual o tamanho da externa, * Matrioshka invalida */ if(matrioshka->prox->prox->contador <= matrioshka->prox->prox->tamanho){ return 0; } } /* Processo realizado sem cair nos casos invalidos */ return 1; }