Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Pilhas |
Crie uma pilha com as funcionalidades de empilhar, desempilhar, exibir a pilha, exibir o meio da pilha e excluir o nó no meio da pilha - Exercícios Resolvidos de CQuantidade de visualizações: 87 vezes |
Pergunta/Tarefa: A Pilha é uma estrutura de dados do tipo LIFO - Last-In, First-Out (Último a entrar, primeiro a sair). Neste tipo de estrutura, o último elemento a ser inserido é o primeiro a ser removido. Veja a imagem a seguir: ![]() Crie uma pilha usando uma lista encadeada simples com as funcionalidades de empilhar, desempilhar, exibir a pilha, exibir o meio da pilha e excluir o nó no meio da pilha. Seu código deverá usar alocação dinâmica de memória. O uso de vetores e matrizes na resolução não é permitida. Sua saída deverá ser parecida com: Informe o valor a ser empilhado: 7 O nó no meio da pilha é: 7 Informe o valor a ser empilhado: 4 O nó no meio da pilha é: 7 Informe o valor a ser empilhado: 2 O nó no meio da pilha é: 4 Informe o valor a ser empilhado: 9 O nó no meio da pilha é: 4 Informe o valor a ser empilhado: 5 O nó no meio da pilha é: 2 Os elementos da pilha são: 5 9 2 4 7 A pilha sem o elemento do meio: 5 9 4 7 Veja a resolução comentada deste exercício usando C: #include <stdio.h> #include <stdlib.h> // estrutura usada para representar os nós da pilha struct No { int valor; // valor do nó struct No* proximo; // aponta para o próximo nó struct No* anterior; // aponta para o nó anterior }; // estrutura que representa a pilha. Note os ponteiros para // o nó do topo, o nó do meio e um contador de nós struct Pilha { struct No* topo; struct No* meio; int contador; }; // função usada para empilhar um novo elemento na pilha void empilhar(struct Pilha* pilha, int valor) { // vamos reservar memória para um novo nó struct No* novo_no = (struct No*)malloc(sizeof(struct No)); // definimos o valor do novo nó novo_no->valor = valor; // o anterior do novo nó não aponta para ninguém novo_no->anterior = NULL; // o próximo do novo nó aponta para o topo da pilha novo_no->proximo = pilha->topo; // agora atualizamos o meio da pilha baseado no número de // nós que temos até agora if (pilha->contador == 0) { pilha->meio = novo_no; } else if (pilha->contador % 2 == 0) { pilha->meio = pilha->meio->anterior; } // atualizamos o ponteiro anterior do nó no topo if (pilha->topo != NULL) { pilha->topo->anterior = novo_no; } // finalmente atualizamos o ponteiro topo e // incrementamos o contador pilha->topo = novo_no; pilha->contador++; } // função usada para desempilhar um elemento da pilha int desempilhar(struct Pilha* pilha) { // vamos obter o nó que está no topo da pilha struct No* topo = pilha->topo; int valor = topo->valor; // ajustamos o topo da pilha para o nó seguinte pilha->topo = topo->proximo; // agora precisamos ajustar o ponteiro anterior if (pilha->topo != NULL) { pilha->topo->anterior = NULL; } // liberamos a memória do ponteiro que removemos free(topo); // atualizamos o ponteiro do meio baseado no // número de elementos if (pilha->contador % 2 == 1) { pilha->meio = pilha->meio->proximo; } // diminuimos o contador pilha->contador--; // e retornamos o valor do nó removido ...... Restante do código disponível na Área de Apoiadores do site Ainda não é apoiador(a)? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) |
![]() |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |