Ir ao conteúdo

Posts recomendados

Postado

Pessoal, eu preciso implementar uma função para acessar elemento(pilha, elemento), que quando dada uma pilha, acessa o dado escolhido, tirando-o da estrutura e os demais elementos continuam armazenados depois da remoção. Depois que for removido a função deve retornar a posição do elemento na pilha (considerando o topo como elemento de posição 1).Se esse elemento não estiver na pilha retorne -1. Por exemplo:

entrada:

5

3 6 8 1 9

8

Saída:

3

9 1 6 3

Eu tenho o seguinte código base:

#include <iostream>

using namespace std;

class noh {
friend class pilha;
private:
    int dado; // poderia ser outro tipo de variável
    noh* prox;
};

// pilha dinamicamente encadeada
class pilha {
private:
    noh* topo;
    int tamanho;

public:
    pilha();
    ~pilha();
    void push(int d) { empilha(d); }
    void empilha(int d);
    int pop() { return desempilha(); }
    int desempilha(); // retorna o topo da pilha
    int espia(); // espia o topo da pilha
    bool vazia();
    void limpaPilha(); //limpa a pilha
};

/* implementar os métodos da pilha */


//  Implementar aqui
int acessaElemento(pilha& p1, int elemento){
//  Implementar aqui
}

int main() {
    pilha p1;
    int n, numero, elemento;
    cin >> n;

    while (n > 0) {
        cin >> numero;
        p1.empilha(numero);
        n--;
    }

    cin >> elemento;
    cout << acessaElemento(p1,elemento) << endl;

    while (not p1.vazia()) {
        cout << p1.desempilha() << " ";
    }

    cout << endl;

    return 0;
}

 

Como eu posso preencher esses espaços?

  • Curtir 1
Postado
    int acessaElemento(pilha& p1, int elemento);

 

Esse é um problema bem folclórico. A noção de pilha como estrutura de dados não inclui esse tipo de função. Numa pilha só se acessa o elemento de cima, numa abstração de.... pilha.

 

C++ tem pilhas, você pode incluir <stack> e declarar suas próprias pilhas de qualquer coisa.

 

E para ficar mais estranho a função acessaElemento() numa suposta pilha (que não é uma pilha) REMOVE um elemento. Imagino que nome teria uma função que acessa apenas...

 

Numa pilha só se pode remover o elemento de cima.

 

Mas é a pilha do enunciado e se pode dar o nome que quiser :D

 

Você está usando uma lista para implementar a pilha e não é a escolha comum, um vetor seria mais simples. E se é uma lista deveria ter ponteiros para os dois lados porque é muito mais fácil assim.

 

Removendo o elemento na posição N afinal

 

Você sabe sempre quantos elementos tem na pilha. Se forem menos que N já pode retornar na chamada. E se tem ao menos N num único loop você navega a partir do início até o elemento (n-1) e faz ele apontar para o que vinha depois do (n). E então remove o (n). Nada mais.

 

 

Poste um programa completo...

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!