Pilha, algoritmos push, pop e imprimir explicados
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 46.344 ]
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(); }
Biblioteca do Calculo do Retangulo em C++
Problema de Equação do Primeiro Grau
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Java é uma linguagem de brinquedo? (1)
Linux não desliga a tela da TV nunca (4)
Mudar ícone do favorito "encerrar sessão" do Debian 12.10, c... (2)