Pilha, algoritmos push, pop e imprimir explicados
Publicado por Ewerton Daniel de Lima (última atualização em 19/03/2010)
[ Hits: 46.072 ]
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(); }
Calcula média de notas do aluno
DOOM clássico (quase) vanilla e um pouco melhorado
Mamãe, quero descompactar e também compactar arquivos no terminal!
Warped Tentacles para Doom Clássico
Conheça a extensão Just Perfection para mudar várias opções do Gnome
Desligando ou reiniciando o Gnome rapidinho
Impedir que seja trocado o nome da conta pelo usuário no "Configu... (19)
menu em yad não funciona os botões de fecha (9)
Zorin 17.1 MacBook pro 2011 - Monitor secundário sem imagem/sem sinal ... (2)
Dois Linux numa maquina só (9)
Como ter permissão para inserir ficheiros no nextcloud usando usuário ... (5)