Enviado em 11/05/2018 - 10:52h
Em baixo é o código de uma lista encadeada que estou criando, só que quando eu uso a variável "Tamanho" pra testar a expressão o loop para na metade(quase) e quando uso o valor que esta na variável (13) o loop funciona certinho.#include <iostream>
using namespace std;
class No{
private:
int Valor;
No* Proximo = nullptr;
No* Anterior = nullptr;
public:
void setValor(int a){
Valor = a;
}
int getValor(){
return Valor;
}
void setProximo(No* a){
Proximo = a;
}
No* getProximo(){
return Proximo;
}
void setAnterior(No* a){
Anterior = a;
}
No* getAnterior(){
return Anterior;
}
};
class Lista{
private:
No* noInicio;
No* noFim;
No* Anterior = nullptr;
int Tamanho = 0;
public:
Lista(){
noInicio = nullptr;
noFim = nullptr;
}
Lista(int a){
No* no = new No;
no->setValor(a);
noInicio = no;
noFim = no;
Tamanho++;
}
bool Vazia(){
if (noInicio == nullptr) return true;
else return false;
}
void AddNoFim(int a){
if (Vazia()){
No* no = new No;
no->setValor(a);
noInicio = no;
noFim = no;
Tamanho++;
}
else {
No* no = new No;
no->setValor(a);
noFim->setProximo(no);
no->setAnterior(noFim);
noFim = no;
Tamanho++;
}
}
void AddNoInicio(int a){
if (Vazia()){
No* no = new No;
no->setValor(a);
noInicio = no;
noFim = no;
Tamanho++;
}
else {
No* no = new No;
no->setValor(a);
no->setProximo(noInicio);
noInicio->setAnterior(no);
noInicio = no;
Tamanho++;
}
}
int getUltimoElemento(){
if (Vazia()){
throw "Lista Vazia!!!";
} else return noFim->getValor();
}
int getPrimeiroElemento(){
if (Vazia()){
throw "Lista Vazia!!!";
} else return noInicio->getValor();
}
void Mostrar(){
if (!Vazia()){
No* no;
no = noInicio;
while (no->getProximo() != nullptr){
cout << "Valor: " << no->getValor() << endl;
no = no->getProximo();
}
cout << "Valor: " << no->getValor() << endl; /// imprime o ultimo elemento
}
}
void RemoverDoFim(){
No* Aux;
if (!Vazia()){
if (noFim->getAnterior() != nullptr){
Aux = noFim->getAnterior();
Aux->setProximo(nullptr);
delete noFim;
noFim = Aux;
Tamanho--;
}
else {
delete noFim;
noFim = nullptr;
noInicio = nullptr;
Tamanho--;
}
}
}
void RemoverDoInicio(){
No* Aux;
if (!Vazia()){
if (noInicio->getProximo() != nullptr){
Aux = noInicio->getProximo();
Aux->setAnterior(nullptr);
delete noInicio;
noInicio = Aux;
Tamanho--;
}
else {
delete noInicio;
noInicio = nullptr;
noFim = nullptr;
Tamanho--;
}
}
}
unsigned int PegaTamanho(){
return Tamanho;
}
void LimpaTodaALista(){
for (int i = 0; i < Tamanho; i++){ /// AQUI ESTA O MEU PROBLEMA
RemoverDoInicio();
cout << "LOOP: " << i << " Tamanho: " << Tamanho << endl;
}
}
};
int main(){
Lista LISTA;
try{
///pode (e vai) acontercer um erro aqui (Lista Vazia)
cout << "Ultimo Elemento: " << LISTA.getUltimoElemento() << endl;
}
catch(const char* e){
cout << "ERROR: " << e << endl;
}
for (int i = 0; i < 8; i++) LISTA.AddNoInicio(i);
for (int i = 0; i < 5; i++) LISTA.AddNoFim(i);
try{
///pode acontercer um erro aqui (Lista Vazia) mais não deve...
cout << "\nUltimo Elemento: " << LISTA.getUltimoElemento() << endl;
}
catch(const char* e){
cout << "ERROR: " << e << endl;
}
LISTA.Mostrar();
cout << "Tamanho de Lista: " << LISTA.PegaTamanho() << endl;
cout << "\nDEPOIS DE LIMPAR TODA A LISTA\n";
LISTA.LimpaTodaALista();
LISTA.Mostrar();
cout << "Tamanho de Lista: " << LISTA.PegaTamanho() << endl;
getwchar();
return 0;
}
thor@thanos:~/Documentos/teste$ g++ main.cpp -o teste
thor@thanos:~/Documentos/teste$ ./teste
ERROR: Lista Vazia!!!
Ultimo Elemento: 4
Valor: 7
Valor: 6
Valor: 5
Valor: 4
Valor: 3
Valor: 2
Valor: 1
Valor: 0
Valor: 0
Valor: 1
Valor: 2
Valor: 3
Valor: 4
Tamanho de Lista: 13
DEPOIS DE LIMPAR TODA A LISTA
LOOP: 0 Tamanho: 12
LOOP: 1 Tamanho: 11
LOOP: 2 Tamanho: 10
LOOP: 3 Tamanho: 9
LOOP: 4 Tamanho: 8
LOOP: 5 Tamanho: 7
LOOP: 6 Tamanho: 6
Valor: 0
Valor: 0
Valor: 1
Valor: 2
Valor: 3
Valor: 4
Tamanho de Lista: 6
thor@thanos:~/Documentos/teste$
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Instalação Uefi com o instalador clássico do Mageia [RESOLVIDO] (2)
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)