Jump to content
Fórum Script Brasil
  • 0

Pilha/Ponteiros (c++)


Question

/*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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148904
    • Total Posts
      644996
×
×
  • Create New...