Pilha, algoritmos push, pop e imprimir explicados
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 46.538 ]
Olá pessoal,
Construí uma pilha em C com alocação dinâmica.
Como nos outros códigos, procurei comentar ao máximo.
#include <stdio.h>
#include <string.h>
#include <malloc.h>
/*Declaração do tipo nó para a fila, composto de
ponteiro para o próximo nó e de um campo para dado
que no caso é o campo char dado[30];
*/
typedef struct no {
char dado[30];
struct no *proximo;
} no;
no *topo = NULL; //Ponteiro para o topo da pilha
no *alocar; //Ponteiro para fazer alocação
/*Rotina que faz a inserção de elementos na pilha
O Parâmetro dado recebe um ponteiro para string
A função não retorna valor algum
*/
void push(char *dado) {
alocar = (struct no *) malloc(sizeof(struct no)); //Faz alocação na memória
if (!alocar) { //Se não for possível a alocação, sai do programa
printf("Falta de memória");
exit(0);
}
strcpy(alocar->dado, dado); //Copia o dado para o novo nó alocado
if (!topo) { //Se não houver elemento ainda na pilha, insere
//na base, apontando o ponteiro de topo para o único
//elemento até então inserido
topo = alocar;
topo->proximo = NULL;
}
else //se não...
{
alocar->proximo = topo; //Aponta o próximo para o "antigo" topo da pilha
topo = alocar; //Aponta o ponteiro de topo para o dado que foi alocado
}
}
/*
Rotina que retira elementos da pilha
O elemento retirado sempre é o que está no topo
*/
char * pop() {
char *ponteiro = topo->dado;
topo = topo->proximo;
return ponteiro;
}
/*Imprime todos os elementos da pilha na tela
na ordem de retirada
*/
void imprimir() {
no *ponteiro = topo;
while (ponteiro) {
printf("\n%s", ponteiro->dado);
ponteiro = ponteiro->proximo;
}
}
/*Rotina principal
com alguns pushs e pops
*/
int main() {
char dado[30];
printf("\nInserir: ");
gets(dado);
push(dado);
printf("\nInserir: ");
gets(dado);
push(dado);
printf("\nInserir: ");
gets(dado);
push(dado);
printf("\nInserir: ");
gets(dado);
push(dado);
imprimir();
printf("\nRetirar: ");
getchar();
printf("\nSaiu da pilha: %s", pop());
imprimir();
printf("\nRetirar: ");
getchar();
printf("\nSaiu da pilha: %s", pop());
imprimir();
getchar();
}
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









