LucasDuarte Posted April 22, 2015 Report Share Posted April 22, 2015 Olá! Fiz uma pilha que cumpre a sua função Desempilhar normalmente, de cima para baixo. Agora estou tentando desempilhar essa mesma pilha só que de Baixo para Cima mas estou com dificuldades e gostaria da ajuda dos senhores. Agradeço desde já! Segue o Código: #include <stdio.h> #include <stdlib.h> struct Item { int numero; struct Item *proximo; }; void Inicializar(Item **topo) { *topo = NULL; } bool EstaVazia(Item **topo) { if(*topo == NULL) return true; else return false; } void Empilhar(Item **topo, int elemento) { Item *novo; novo = (Item *)malloc(sizeof(Item)); novo->numero = elemento; novo->proximo = *topo; // -> próximo recebe o elemento que estava no topo. *topo = novo; } int Desempilhar(Item **topo) { int result; Item *auxiliar; if(EstaVazia(topo)) { printf("\n stack underflow! \n"); exit(1); } else // -> Elemento retirado do topo { result = (*topo)->numero; auxiliar = *topo; *topo = (*topo)->proximo; free(auxiliar); return result; } } void MostrarPilha(Item *topo) { int i = 0; Item *item; printf("\n\n Listando...\n\n"); printf("---------------------------------\n"); if (EstaVazia(&topo)) { printf ("A Pilha esta vazia!\n"); } else { item = topo; while(item != NULL) { i++; printf("[%i] -> %i\n", i, item->numero); item = item->proximo; } } printf("---------------------------------\n"); } void Menu() { printf( "\n\nDigite a sua escolha: \n" " 1 empilhar elemento \n" " 2 desempilhar \n" " 3 para finalizar \n" "? "); } main() { Item *topo = NULL; int opcao; int numero; Menu(); scanf("%i", &opcao); while (opcao != 3) { switch (opcao) { case 1: printf( "Digite um numero: "); scanf("\n%i", &numero); Empilhar(&topo, numero); MostrarPilha(topo); break; case 2: numero = Desempilhar(&topo); printf( "\n Numero desempilhado: %d \n",numero); MostrarPilha(topo); break; default: printf( "Escolha invalida.\n\n"); break; } Menu(); scanf("%i", &opcao); } system("pause"); } Quote Link to comment Share on other sites More sharing options...
0 Durub Posted April 27, 2015 Report Share Posted April 27, 2015 Sem tornar a lista simplesmente ligada em uma duplamente ligada essa operação é "complicada", ao menos em termos de performance. A lista precisa ser simplesmente ligada? (não possuir ponteiro para o elemento anterior, apenas para o próximo) Abraços. Quote Link to comment Share on other sites More sharing options...
Question
LucasDuarte
Olá! Fiz uma pilha que cumpre a sua função Desempilhar normalmente, de cima para baixo.
Agora estou tentando desempilhar essa mesma pilha só que de Baixo para Cima mas estou com dificuldades e gostaria da ajuda dos senhores.
Agradeço desde já!
Segue o Código:
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.