aula 224

Operação push. Como empilhar um dado na estrutura de dados pilha?

Dando continuidade ao estudo da estrutura de dados dinâmica do tipo pilha, vamos aprender nesta aula como fazer a operação push. Como empilhar um dado na estrutura de dados pilha?

Para sair do básico da maioria dos exemplos que sempre apresenta estrutura de dados apenas com números inteiros, vamos implementar o tipo pessoa para este exemplo. O nosso tipo Pessoa terá um nome e uma data de nascimento como apresentado a seguir.

// definição do tipo Pessoa

typedef struct{
    int dia, mes, ano;
}Data;

typedef struct{
    char nome[50];
    Data data;
}Pessoa;

Em algum momento será interessante imprimir nossa pilha. Como a pilha será de Pessoas, então também precisaremos de um procedimento para imprimir as informações de uma Pessoa e uma função pera ler as informações de uma pessoa, que será útil no momento de inserirmos uma pessoa na pilha.

// função para criar uma Pessoa
Pessoa ler_pessoa(){
    Pessoa p;
    printf("\nDigite nome e data de nascimento dd mm aaaa:\n");
    scanf("%49[^\n]%d%d%d", p.nome, &p.data.dia, &p.data.mes, &p.data.ano);
    return p;
}

// procedimento para imprimir as informações de uma Pessoa
void imprimir_pessoa(Pessoa p){
    printf("\nNome: %s\nData: %2d/%2d/%4d\n", p.nome, p.data.dia, p.data.mes, p.data.ano);
}

Agora vamos construir o nosso nó. Uma pilha é composta de vários nós encadeados e cada nó possui basicamente dois campos: uma campo dado, neste exemplo será uma Pessoa, e um campo ponteiro apontando para o nó seguinte.

// estrutura nó que irá compor nossa pilha

typedef struct no{
    Pessoa p;
    struct no *proximo;
}No;

Em uma estrutura do tipo PILHA as operações sempre ocorrem no topo. Assim, para inserir um novo elemento na pilha precisamos receber o topo atual da pilha, uma variável do tipo nó normalmente declarada na função main. Dentro da função vamos alocar memória para um novo nó, ler os dados de uma Pessoa e fazer esse novo nó apontar para o topo atual da pilha. Por fim, este nó inserido será o novo topo da nossa pilha, então seu endereço precisa ser retornado, alterando o topo na variável declarada na função main.

// função para a operaçao push (empilhar)

No* empilhar(No *topo){
    No *novo = malloc(sizeof(No));

    if(novo){
        novo->p = ler_pessoa();
        novo->proximo = topo;
        return novo;
    }
    else
        printf("\nErro ao alocar memoria...\n");
    return NULL;
}
      

Na próxima aula veremos como realizar a operação para desempilhar um nó da nossa lista, a operação pop.

Deixe um comentário

5 × 1 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.