Monitoria Virtual - UENP
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
avatar
Emanoel Juvencio
Admin
Admin
Mensagens : 3
Pontos : 6
Data de inscrição : 07/02/2020
Idade : 26
https://monitoriauenp.forumeiros.com

Aula Exemplo 1 - Estrutura de dados Empty Aula Exemplo 1 - Estrutura de dados

Ter Jun 16, 2020 4:26 pm
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 ESTÁTICA: Os itens da pilha são armazenados em posições de memória. Como as inserções e as retiradas ocorrem no topo da pilha, um cursor chamado Topo é utilizado para controlar a posição do item no topo da pilha. Os itens são armazenados em um vetor de tamanho suficiente para conter a pilha. O outro campo do mesmo registro contém o índice do item no topo da pilha. A constante Max define o tamanho máximo permitido para a 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{
   REGISTRO num;
}ELEMENTO;

typedef struct{
   int topo;
   ELEMENTO A[MAX];
}PILHA;

Operações em Pilha estática

Inicialização
Código:
//Função:
void inicializarPilha (PILHA *p){
   p->topo = -1;
}

Tamanho daPilha
Código:
///Função:
int retornarQuantidade (PILHA *p){
   return p->topo += 1;
}

Exibir Pilha
Código:
//Função:
void exibirPilha (PILHA *p){
   int i;
   printf("Pilha: \ ");
   for (i = p->topo ; i >= 0; i--){    //Começando do topo para baixo
       printf("%i ", p->A[i].reg.chave);
   }

Inserir elemento na Pilha
Código:
//Função:
int inserirNumero (PILHA *p, REGISTRO num){
   if (p->topo >= MAX-1){   //Testando se há espaço
       return -1;
   }
   p->topo += 1;        //Aumenta o valor do topo
   p->A[p->topo].num = num; //Atribui a posição topo o valor do registro
   return 0;
}

Excluir elemento da Pilha
Código:

//Função:
int excluirNumero (PILHA *p){
    if (p->topo == MAX-1){   //Se ela nao estiver vazia
        return -1;
    }
    p->topo-=1;             // Basta diminuir um valor do topo
    return 0;
}

Reinicializar Pilha
Código:

//Função:
void reinicializar (PILHA *p){
    p->topo = -1;
}

Abaixo deixe suas Duvidas

Emanoel Juvencio gosta desta mensagem

Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos