Programar em C/Pilha
Aspeto
Pilha
[editar | editar código-fonte]Pilha ou stack é uma lista linear em que todas as inserções e remoções de elemento só podem ser feitos em uma extremidade chamada topo.As pilhas também são chamadas de estruturas LIFO (Last In First Out) ou seja o último elemento inserido é o primeiro removido.
Construção do protótipo de um elemento da lista.
[editar | editar código-fonte]
typedef struct Elemento_da_lista{
char *dados;
struct Elemento_da_lista *proximo;
}Elemento;
struct Localizar{
Elemento *inicio;
int tamanho;
} Pilha;
Inicialização
[editar | editar código-fonte]void iniciar (Localizar *monte){
monte->inicio = NULL;
monte->tamanho = 0;
}
Inserir um elemento na pilha(push)
[editar | editar código-fonte]Algoritmo:
Declaração do elemento(s) a ser inserido.
Alocação da memória para o novo elemento
Inicializar o campo de dados.
Preencher o ponteiro inicio com o primeiro elemento
Colocar em dia o tamanho da pilha.
int empilhar(Localizar * monte, char *dados){
Elemento *novo_elemento;
if ((novo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
return -1;
if ((novo_elemento->dados = (char *) malloc (50 * sizeof (char)))
== NULL)
return -1;
strcpy (novo_elemento->dados, dados);
novo_elemento->proximo = monte->inicio;
monte->inicio = novo_elemento;
monte->tamanho++;
}
Retirar um elemento da pilha (pop)
[editar | editar código-fonte]int desempilhar (Localizar *monte){
Elemento *p_elemento;
if (monte->tamanho == 0)
return -1;
p_elemento = monte->inicio;
monte->inicio = monte->inicio->proximo;
free (p_elemento->dados);
free (p_elemento);
monte->tamanho--;
return 0;
}
Imprimir os elementos da pilha
[editar | editar código-fonte]void mostrar(Localizar * monte){
Elemento *atual;
int i;
atual = monte->inicio;
for(i=0;i<monte->tamanho;++i){
printf("\t\t%s\n", atual->dados);
atual = atual->proximo;
}
}