Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

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 C

Quantidade 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
Resposta/Solução:

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)


Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 38 usuários muito felizes estudando em nosso site.