3. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Pilhas
O que é?:
É um TAD, onde o último a entrar é o primeiro a sair. A pilha é um tipo de
estrutura bastante utilizado em sistemas computacionais.
PILHAS
4. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Conceitos:
L.I.F.O
LAST IN, FIRST OUT.
Último a entrar, primeiro a sair.
Conhecido também como Stack.
Pilhas
PILHAS
5. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Como funciona:
• Iniciar a pilha.
• Verifica se a pilha está vazia.
• Inserir um elemento no final da pilha.
• Retirar um elemento no final da pilha.
Pilhas
PILHAS
6. ESTRUTURA DE DADOS – Prof. Thomás da Costa
struct alunos
{
char nome[100];
int idade;
alunos *proximo;
} *primeiro;
char nome[100];
int idade;
"Aluno 1"
20
alunos *proximo;
char nome[100];
int idade;
"Aluno 2"
21
alunos *proximo;
char nome[100];
int idade;
"Aluno 3"
23
alunos *proximo;
NULL
Estrutura “alunos”.
Próximo elemento da pilha.
Primeiro elemento da pilha.
Primeiro elemento a sair da pilha.
Elemento 1 Elemento 2 Elemento 3
Pilhas
PILHAS
7. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Onde utilizamos:
• Funções recursivas.
• Navegação entre páginas dentro de um navegador web.
• Mecanismo de desfazer uma ação e refazê-la em um editor de texto.
Pilhas
PILHAS
8. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Observações:
• Utilizamos o algoritmo de lista.
• Podemos utilizar o algoritmo de lista encadeada, lista duplamente
encadeada e lista circular.
• Nos algoritmos, sempre inserimos um elemento no final.
• No algoritmo de pilha, a remoção acontece no último elemento.
• Nos nossos exemplos conseguirmos percorrer a pilha do começo mas
podemos retirar somente do final.
Pilhas
PILHAS
9. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Operações:
Vamos analisar as funções !!!
Pilhas
PILHAS
• void iniciar_lista();
• int esta_vazio();
• void inserir_aluno();
• void listar_alunos();
• alunos *ultimo_elemento();
• void remover_aluno();
• void menu();
• void limpar_teclado();
10. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Inicializando a lista com elemento vazio.
void iniciar_lista()
{
primeiro = NULL;
}
11. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Retorna o total de elementos de uma lista.
Lista vazia.
int esta_vazio()
{
system("cls");
int total;
if (primeiro == NULL)
total = 0;
else
{
alunos *p;
p = primeiro;
total = 1;
while (p->proximo != NULL)
{
p = p->proximo;
total++;
}
}
return total;
}
12. ESTRUTURA DE DADOS – Prof. Thomás da Costa
void inserir_aluno()
{
system("cls");
limpar_teclado();
alunos *novo_aluno = new alunos;
cout << "Digite o nome do aluno:" << endl;
fgets(novo_aluno->nome, sizeof(novo_aluno->nome), stdin);
cout << "Digite a idade do aluno:" << endl;
cin >> novo_aluno->idade;
novo_aluno->proximo = NULL;
if (primeiro == NULL)
{
primeiro = novo_aluno;
ultimo = novo_aluno;
}
else
{
alunos *p;
p = primeiro;
while (p->proximo != NULL)
p = p->proximo;
p->proximo = novo_aluno;
ultimo = novo_aluno;
}
}
13. ESTRUTURA DE DADOS – Prof. Thomás da Costa
void listar_alunos()
{
system("cls");
if (primeiro == NULL)
{
cout << "Nenhum aluno cadastrado." << endl;
cout << "Pressione uma tecla para continuar..." << endl;
getch();
return;
}
alunos *p;
p = primeiro;
if (p->proximo == NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
}
else
{
while (p != NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
p = p->proximo;
}
}
getch();
}
14. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Retorna o último elemento.
alunos *ultimo_elemento()
{
return ultimo;
}
15. ESTRUTURA DE DADOS – Prof. Thomás da Costa
void remover_aluno()
{
alunos *p = primeiro;
while (p->proximo != ultimo)
p = p->proximo;
delete p->proximo;
ultimo = p;
p->proximo = NULL;
cout << "Aluno excluído com sucesso !!!" << endl;
getch();
}
Excluindo elemento da
memória.
16. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Novas opções de menu !!!
void menu()
{
system("cls");
cout << "1 - INSERIR ALUNOS" << endl;
cout << "2 - LISTAR ALUNOS" << endl;
cout << "3 - EXCLUIR ALUNOS" << endl;
cout << "4 - TAMANHO DA LISTA" << endl;
cout << "5 - ULTIMO ELEMENTO" << endl;
cout << "0 - SAIR" << endl;
cout << "Digite uma opção: ";
}
17. ESTRUTURA DE DADOS – Prof. Thomás da Costa
• LIFO – Last in, First Out.
• Primeiro elemento entra no final da fila.
• Aprimoramos o programa utilizado em lista para remover sempre o último
elemento.
• A estrutura aponta para o primeiro elemento da lista. Com isso mantemos a
referência para o início da lista.
• Possuímos uma referência para o último elemento da lista.
Resumo
PILHAS