Ir ao conteúdo
  • Cadastre-se

C++ Acessar um elemento da pilha


fevilela

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

    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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!