Retirar elemento de uma fila

1. Retirar elemento de uma fila

Igor ten Caten ZAtti
iogrzatti

(usa Outra)

Enviado em 27/05/2017 - 22:07h

O Push acho que esta certo o problema e que no Pop sempre retorna o memo o valor

#ifndef NODE_H
#define NODE_H


class Node
{
public:
int conteudo;
Node *next;
Node();
};

#endif // NODE_H


#ifndef FILA_H
#define FILA_H


#include <stdlib.h>
#include "node.h"

class Fila
{
private:
Node *Head;
Node *Tail;
public:
Fila();
bool Fila_Push(int valor);
bool Fila_pop(int &valor);
void Fila_get(int &valor);
bool Fila_Vazia();
};


#endif // FILA_H


#include <iostream>
using namespace std;
#include "fila.h"
Fila::Fila()
{
Head = NULL;
Tail = NULL;
}

bool Fila::Fila_Push(int valor)
{
Node *Nnew = (Node*)malloc(sizeof(Node));

if(Nnew == NULL)
{
return false;
}

Nnew->conteudo = valor;
Nnew->next = NULL;
if(Fila::Fila_Vazia()){
Head = Nnew;
}else{
Nnew->next = Tail;
}
Tail = Nnew;
//cout<<Head->conteudo<<"\n";
return true;
}

bool Fila::Fila_pop(int &valor)
{
if(Fila::Fila_Vazia()){
return false;
}
Node *Temp;
Temp = Head;
valor = Head->conteudo;
Head = Temp->next;
if(Head == NULL){
Tail = NULL;
}
Temp = NULL;
free(Temp);
return true;
}

bool Fila::Fila_Vazia()
{
if(Head == NULL)
return true;
return false;
}



  


2. Re: Retirar elemento de uma fila

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/05/2017 - 02:00h

iogrzatti escreveu:

O Push acho que esta certo o problema e que no Pop sempre retorna o memo o valor

#ifndef NODE_H
#define NODE_H


class Node
{
public:
int conteudo;
Node *next;
Node();
};

#endif // NODE_H


#ifndef FILA_H
#define FILA_H


#include <stdlib.h>
#include "node.h"

class Fila
{
private:
Node *Head;
Node *Tail;
public:
Fila();
bool Fila_Push(int valor);
bool Fila_pop(int &valor);
void Fila_get(int &valor);
bool Fila_Vazia();
};


#endif // FILA_H


#include <iostream>
using namespace std;
#include "fila.h"
Fila::Fila()
{
Head = NULL;
Tail = NULL;


Já que você está usando C++, evite NULL. Prefira nullptr (ou simplesmente 0, se você estiver com uma versão obsoleta de C++).

}

bool Fila::Fila_Push(int valor)
{
Node *Nnew = (Node*)malloc(sizeof(Node));


Não cometa esse sacrilégio! Você está usando C++, que tem uma forma muito mais limpa de fazer alocação. Além disso, Node é um tipo para o qual você declarou um construtor explícito (embora não tenha mostrado aqui sua implementação), o que é um indício de que você precisa usar a notação do C++.

    Node *Nnew=new Node;  // Olha só como é melhor! 


    if(Nnew == NULL)
{
return false;
}

Nnew->conteudo = valor;
Nnew->next = NULL;
if(Fila::Fila_Vazia()){
Head = Nnew;
}else{
Nnew->next = Tail;


Não faz sentido essa atribuição. Se é uma fila, um novo nó sempre será colocado no final. Sendo sempre o último, o próximo será sempre nulo.

    }
Tail = Nnew;
//cout<<Head->conteudo<<"\n";
return true;
}

bool Fila::Fila_pop(int &valor)
{
if(Fila::Fila_Vazia()){
return false;
}
Node *Temp;
Temp = Head;
valor = Head->conteudo;
Head = Temp->next;
if(Head == NULL){
Tail = NULL;
}
Temp = NULL;
free(Temp);


Se você seguir a sugestão de usar new para a alocação, deve também usar delete para desalocar.

    delete Temp; 


    return true;
}

bool Fila::Fila_Vazia()
{
if(Head == NULL)
return true;
return false;


Jeito mais sucinto de dizer isso:

   return !Head;  // Mesmo que “return Head==nullptr;”. 


} 









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts