0% acharam este documento útil (0 voto)
18 visualizações35 páginas

Aula 5

Slide 5 Programação

Enviado por

harunostain23
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
18 visualizações35 páginas

Aula 5

Slide 5 Programação

Enviado por

harunostain23
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 35

Algoritmo e

estruturas de dados

Professora: Luciana C. Castro


Operações e
problemas com pilhas
Na seção anterior, você estudou que uma pilha é uma estrutura
de dados do tipo LIFO (Last in, First out), ou seja, na qual o
último elemento a entrar é o primeiro a sair.
Assim, nos elementos que ainda permanecem, o que está no
topo da pilha será o primeiro a ser removido.

Conforme Celes, Cerqueira e Rangel (2004), em uma estrutura


de Pilha, devem ser implementadas duas operações básicas:
• empilhar um novo elemento;
• desempilhar um elemento.
Segundo Lorenzi, Mattos e Carvalho (2015), a operação de
empilhar um novo elemento tem a função de inserir um
elemento na pilha, sendo definida na programação em C++
como push( ). Por exemplo, ao colocar um livro em cima de
uma pilha de livros, você estará inserindo esse livro no topo da
pilha.
Já a operação de desempilhar tem a função de remover um
elemento do topo da pilha, sendo utilizada na programação
em C++ como pop( ). Por exemplo, remover o livro que está no
topo da pilha.
Conforme Drozdek (2016), outras operações que podem ser
implementadas na pilha são:
• limpar a pilha, utilizando a função clear( );
• verificar se a pilha está vazia, com base na função isEmpty( )
Inserir elementos na pilha Conforme Tenenbaum, Langsam e
Augenstein (2007), uma pilha possui uma estrutura que pode
ser declarada contendo dois objetos:
• um ponteiro, que irá armazenar o endereçamento inicial da
pilha;
• um valor inteiro, que irá indicar a posição do topo da pilha.

Para utilização de uma pilha, primeiramente, é necessário:


• criar a declaração da estrutura da pilha;
• criar a pilha com a alocação dinâmica;
• criar as funções para inserir na pilha e remover dela.
O trecho de código para criação da pilha pode ser
implementado por:
Para inserir um novo elemento na pilha em programação,
você pode criar a função com o nome push_pilha( ), como
demonstrado um trecho para implementação a seguir:
A implementação do trecho de código para a remoção de
elementos do topo da pilha pode ser declarada como no
modelo a seguir, utilizando a função pop_pilha( ):
O trecho para implementação do código para verificar se a
pilha está vazia pode ser dado por:
Operações com pilhas: problema do labirinto
A seguir, um trecho de implementação de criação de uma
solução do problema das N-Rainhas usando backtracking:
1. Definições e Declarações
#define N 8: Define o tamanho do tabuleiro como 8x8, que é
o problema das 8 rainhas.
void imprimeSolucao(int tabuleiro[N][N]): Função que
imprime a solução do tabuleiro. Se uma posição tem uma
rainha (valor 1), imprime "R"; se não, imprime “ . ".
bool posicaoSegura(int tabuleiro[N][N], int linha, int coluna):
Função que verifica se é seguro colocar uma rainha na posição
(linha, coluna).
2. Função posicaoSegura
Verifica a Coluna: Verifica todas as linhas anteriores na
mesma coluna. Se houver uma rainha (1), retorna false.
Verifica a Diagonal Superior à Esquerda: Verifica todas as
posições na diagonal superior à esquerda. Se houver uma
rainha, retorna false.
Verifica a Diagonal Superior à Direita: Verifica todas as
posições na diagonal superior à direita. Se houver uma rainha,
retorna false.
Se todas essas verificações passarem, significa que é seguro
colocar uma rainha na posição (linha, coluna) e a função
retorna true.
3. Função resolveNRainhas
Caso Base: Se linha >= N, todas as rainhas foram colocadas com
sucesso e retorna true.
Iteração sobre as Colunas: Tenta colocar uma rainha em cada
coluna da linha atual.
Se posicaoSegura retornar true, coloca uma rainha na posição (linha, i) e
chama recursivamente resolveNRainhas para a próxima linha.
Se a chamada recursiva retornar false, remove a rainha (backtracking) e
tenta a próxima coluna.
Se nenhuma posição na linha atual permitir uma solução,
retorna false
4. Função resolveNRainhasPrincipal
Inicializa o tabuleiro com zeros (0).
Chama a função resolveNRainhas para começar a solução a
partir da primeira linha (linha = 0).
Se resolveNRainhas retornar false, imprime "Solução não
encontrada"; caso contrário, imprime o tabuleiro com a
solução.
5. Função main
Apenas chama resolveNRainhasPrincipal e encerra o
programa.
Duvidas?

Você também pode gostar