Saltar para o conteúdo

Programar em C/Pilha

Origem: Wikilivros, livros abertos por um mundo aberto.

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;
  }
}