Ir para conteúdo
Fórum Script Brasil
  • 0

Pilha/Ponteiros (c++)


Iorrana Nascimento

Pergunta

/*olá, gostaria de ajuda pra montar um código de pilha em c++,  não sei como acessar o mPtProx (que é privado da classe Noh), nunca mexi com ponteiros, estou com bastante duvidas

*/

#include <iostream>

typedef int Dado;

class Noh {
    friend class Pilha;
    private: Dado mDado; // poderia ser outro tipo de variavel
        Noh* mPtProx;
     
};
       

class Pilha {
    public:
        // Constrói pilha vazia.
        Pilha();
        
        // Destrutor que desaloca memória.
        ~Pilha();
       
        // Retira e retorna o valor que estiver no mPtTopo da pilha.
        // Escreve uma mensagem de erro se não for possível desempilhar.
        Dado Desempilhar();
        
         // retorna o mPtTopo da Pilha
        // Insere um valor na pilha.
        void Empilhar(const Dado& d);
        
        // Apagar todos os dados da pilha.
        void LimparTudo();
        
        // Informa quantos valores existem na pilha.
        unsigned Tamanho() { return mTamanho; }
        
        // Retorna o valor que estao no mPtTopo sem desempilhar.
        Dado Topo() const;
        
        // Informa se a pilha esta Vazia.
        bool Vazia() const;
    private:
        Noh* mPtTopo;
        unsigned mTamanho;
};

using namespace std;

Pilha::Pilha() {
    mPtTopo <- NULL;
    mTamanho=0;
    //mPtProx = -1
    
}

Pilha::~Pilha() {
    delete[] mPtTopo;
    //delete[] mPtProx;

Dado Pilha::Desempilhar() {
    if(mPtTopo == NULL){
        cout << "Pilha esta vazia" << endl;
    }
    else{
        Noh *aux; //ponteiro auxiliar
        mPtTopo -> aux;
        mPtProx -> mPtTopo;
        //opcional:
        cout << dado-> aux << " Removido com sucesso" << endl; 
        
        mTamanho--;
        delete[] aux;
    }
        
//    return dado;
}
    


void Pilha::Empilhar(const Dado &d) {
    Noh *novo = new Noh;
    d -> novo;
    mPtProx-> novo;
    
    if(mPtTopo!=NULL){
        novo<-mPtTopo;
    }
    mPtTopo = novo;    
}

void Pilha::LimparTudo() {
}

Dado Pilha::Topo() const {
    if (mPtTopo == NULL){
        cout << "Pilha vazia" << endl;
    }
    else{
        //cout << mDado->mPtTopo << endl;
    }
    return mDado->mPtTopo ;
}

bool Pilha::Vazia() const {
    if(mPtTopo == NULL){
        cout << "Pilha esta vazia" << endl;
        return 1;
    }
    else{
        return 0;
    }
}

int main() {
    Pilha pilha;
    Dado valor;
    char comando;
    do {
        cin >> comando;
        switch (comando) {
            case 'i': // inserir
                cin >> valor;
                pilha.Empilhar(valor);
                break;
            case 'r': // remover
                cout << pilha.Desempilhar() << endl;
                break;
            case 'l': // limpar tudo
                pilha.LimparTudo();
                break;
            case 't': // consultar tamanho
                cout << pilha.Tamanho() << endl;
                break;
            case 'e': // espiar
                cout << pilha.Topo() << endl;
                break;
            case 'f': // finalizar
                // checado no do-while
                break;
            default:
                cerr << "comando inválido\n";
        }
    } while (comando != 'f'); // finalizar execusao
    while (not pilha.Vazia()) {
        cout << pilha.Desempilhar() << ' ';
    }
    cout << endl;
    return 0;
}

//ainda falta:
int main(){
    
    
    return 0;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...