Pilha, algoritmos push, pop e imprimir explicados
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 46.180 ]
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(); }
Tabela hash com classes e tratamento de colisões por encadeamento
Fibonacci Recursivo e Não Recursivo
Multiplicação de Matrizes com ponteiros
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta