int main(){ int i, remove; float aux; Pilha filha; inicializa_pilha(&filha, 5, sizeof(float)); for(i=0;i<5;i++){ scanf("%f", &aux); empilha(&filha, &aux); } mostra_pilha(filha, mostra_float); printf("\nRemover quantos elementos? (0 ate 5): "); scanf("%d", &remove); for(i=0;i<remove;i++) desempilha(&filha); mostra_pilha(filha, mostra_float); system("PAUSE"); }
//Esta funcao eh responsavel pela leitura de um item a ser retirado da pilha void ler(pilha *P, char &aux) { char item; int achou=0, temp; pilha *L; inicializa_pilha(L); clrscr(); mostra_pilha(P, L); printf("\nDigite o item a ser retirado: "); fflush(stdin); scanf("%c",&item); temp=L->topo; while(L->topo!=0) { pop(&aux, L); if(aux==item) achou=1; if(achou==0) push(aux, P); achou=0; } //Se temp for igual a P->topo significa que o item nao foi retirado, ou seja, //nao foi encontrado. if(temp==P->topo) { printf("\nItem nao cadastrado"); getch(); } }
static void parser(Memory* block, FILE* myfp, Lines* linhas) { int line = 1; int c; Stack *pilha = inicializa_pilha(); while ((c = fgetc(myfp)) != EOF) { switch (c) { case 'r': { /* retorno */ int idx; char var; if (fscanf(myfp, "et %c%d", &var, &idx) != 2) error("comando invalido", line); if (var != '$') checkVarP(var, idx, line); //--// gera(pilha, block, 'r', var, idx, 0, 0, 0, 0, 0, 0, line -1, linhas); printf("ret %c%d\n", var, idx); break; } case 'i': { /* if */ int idx, n1, n2, n3; char var; if (fscanf(myfp, "f %c%d %d %d %d", &var, &idx, &n1, &n2, &n3) != 5) error("comando invalido", line); if (var != '$') checkVar(var, idx, line); linhas->gerouif = 1; gera(pilha, block, 'i', 0, idx, 0, n1, 0, 0, n2, n3, line - 1, linhas); printf("if %c%d %d %d %d\n", var, idx, n1, n2, n3); break; } case 'v': { /* atribuicao */ int idx0, idx1, idx2; char var0 = c, var1, var2; char op; if (fscanf(myfp, "%d = %c%d %c %c%d", &idx0, &var1, &idx1, &op, &var2, &idx2) != 6) error("comando invalido", line); checkVar(var0, idx0, line); if (var1 != '$') checkVarP(var1, idx1, line); if (var2 != '$') checkVarP(var2, idx2, line); //--// gera(pilha, block, 'v', var0, idx0, var1, idx1, op, var2, idx2, 0, line -1, linhas); printf("%c%d = %c%d %c %c%d\n", var0, idx0, var1, idx1, op, var2, idx2); break; } default: error("comando desconhecido", line); } line++; fscanf(myfp, " "); } }
void main() { char aux; pilha *P, *L; pilha pilha_real; P=&pilha_real; char vetor[]="abcdefghijlmnopqrst"; int tam, i; inicializa_pilha(P); inicializa_pilha(L); tam=(int)sizeof(vetor)/sizeof(char); for(i=0; i<tam; i++) push(vetor[i], P); ler(P, aux); mostra_pilha(P, L); getch(); }
void main(void) { tipo_pilha *pilha; /* criar por referencia para nao duplicar os dados.... */ inicializa_pilha ( pilha ); carrega_pilha ( pilha ); mostra_pilha ( pilha ); } /* fim do main */
/* percurso em pre-ordem recursiva */ void preordem(apontador n) { pilha p; inicializa_pilha(p); while (!vazia(p)) { n=pop(n); printf("%d\n", n->chave) if (n->dir != NULL) push(p, n->dir); if (n->esq != NULL) push(p,n->esq); } }