Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Mensagens : 2
Pontos : 7
Reputação : 1
Data de inscrição : 05/05/2017
Idade : 27
Localização : Bandeirantes
Ver perfil do usuário

PILHA DINÂMICA

em Sab Jul 01, 2017 11:53 am
Definição

É uma lista linear em que todas as inserções, retiradas e, geralmente, todos os acessos são feitos em apenas um extremo da lista. Os itens são colocados um sobre o outro. O item inserido mais recentemente está no topo e o inserido menos recentemente no f
Propriedade: o último item inserido é o primeiro item que pode ser retirado da lista. São chamadas listas lifo (“last-in, first-out”). Existe uma ordem linear para pilhas, do “mais recente para o menos recente”. É ideal para processamento de estruturas aninhadas de profundidade imprevisível. Uma pilha contém uma seqüência de obrigações adiadas. A ordem de remoção garante que as estruturas mais internas serão processadas antes das mais externas.
PILHA DINÂMICA: O campo Tamanho evita a contagem do número de itens na função Tamanho. Cada célula de uma pilha contém um item da pilha e um ponteiro para outra célula. O registro TipoPilha contém um ponteiro para o topo da pilha (célula cabeça) e um ponteiro para o fundo da pilha.

A construção do protótipo de um elemento da Pilha

Para determinar um elemento da pilha vamos nos servir do tipo struct.
Código:
typedef int TIPOCHAVE;  

typedef struct{
    TIPOCHAVE chave;    
}REGISTRO;

typedef struct aux{
    REGISTRO reg;
    struct aux* prox;
}ELEMENTO;

typedef ELEMENTO* PONT;

typedef struct{
    PONT topo;
}PILHA;

Operações em Pilha estática

Inicialização

Código:
//Função:
void inicializarPilha(PILHA *p){
    p->topo = NULL;                //Indicar que nao há ngm no topo
}

Tamanho daPilha

Código:
///Função:
int tamanhoPilha(PILHA *p){
    int tamanho =0;
    PONT percorrer = p->topo;           //percorrer toda a pilha
    while (percorrer != NULL){          //Enquanto nao chegar no fim da pilha
        tamanho++;
        percorrer = percorrer->prox;    //Recebe o procximo numero
    }
    return tamanho;
}

Exibir Pilha

Código:
//Função:
void exibirPilha (PILHA *p){
    PONT percorrer = p->topo;
    printf("Pilha: \ ");
    while (percorrer != NULL){       //enquanto a pilha nao chegar ao fim
        printf("%d ", percorrer->reg.chave);   //imprime a chave atual
        percorrer = percorrer->prox;          //faz o percorrer andar uma casa
    }
}

Inserir elemento na Pilha

Código:
//Função:
int inserirNumeroPilha(PILHA* p, REGISTRO reg){
    PONT novo = (PONT) malloc(sizeof(ELEMENTO));  //Criando o novo elemento e alocando memoria para ele
    novo->reg = reg;                //Atribuindo o valor escolido para o novo elemento
    novo->prox = p->topo;            //Fazer o novo elemento apontar para o antigo topo
    p->topo = novo;                  //Fazer o topo ser o novo elemento
return 0;
}

Excluir elemento da Pilha

Código:
//Função:
int excluirNumero(PILHA* p){
    if(p->topo == NULL){     //Testando se a lista nao esta vazia
        return -1;
    }
    PONT apagar = p->topo;  // pega o endereço do topo e o guarda
    free(apagar);          //apaga o conteudo do topo
    return 0;
}

Reinicializar Pilha

Código:
//Função:
void reinicializar(PILHA* p){
    PONT pos = p->topo;
    while (pos != NULL){       //enquanto a pilha nao chegar ao fim
        PONT apagar = pos;    // atribui ao apagar o valor da posição
        pos = pos->prox;     //pega a proxima posição e atrubio ao PONT pos
        free(apagar);
    }
    p->topo = NULL;
 }

Videos para reforços ( ABRA OS SPOILERS )
[ED] Aula 42 - Pilha Dinâmica - Introdução:



[ED] Aula 43 - Pilha Dinâmica - Informações:



[ED] Aula 44 - Pilha Dinâmica - Inserção e Remoção:



ATIVIDADE DE FIXAÇÃO ( ABRA O SPOILER )
Spoiler:

Clique no link abaixo \/ :
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum