• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jpmor82

lista ligada

2 mensagens neste tópico

O que estou a fazer e uma lista ligada ordenada, mas estou com problemas a inserir valores, alguem me pode ajudar:

#include <fstream>
#include <iostream>
#include <cassert>
#include <cstdlib>

using namespace std;

class Lista;

class No
{
public:

No (int novoInt, No* novoProx = NULL);
int Valor (void) {return info;}; // função "inline"
No* Prox(void) {return prox;}; //função "inline"
friend class Lista;

private:

int info;
No *prox;
};
class Lista
{
public:

Lista (void);
Lista& Inserir (int);
Lista& Remover (int);
bool Pertence (int);
friend ostream& operator<<(ostream&, Lista&);

private:

No * cabeca;
int nElementos;
};

No::No (int novoInfo, No* novoProx)
{
info = novoInfo;
prox = novoProx;
}

Lista::Lista (void)
{
cabeca = NULL;
nElementos = 0;
}

Lista& Lista::Inserir (int i)
{

if(cabeca == NULL)
{
	No *novoNo = new No (i, cabeca);
	assert(novoNo); // garante que novoNo não é nulo
	cabeca = novoNo;

	nElementos++;

	return *this;
}
else
{
	No * aux=cabeca;
	while ((aux != NULL) && (aux->Valor() < i))
	{
		aux = aux->prox;
	}

	No * novoNo = new No(i, aux);
	assert(novoNo); 

	aux=novoNo;

	nElementos++;

	return *this;
}
}

Lista& Lista::Remover (int i)
{
No *temp, *anterior;
anterior = cabeca;
if (cabeca != NULL)
{
	if (cabeca->info == i)
	{
		temp = cabeca;
		cabeca = cabeca->prox;
		delete temp;
	}
	else
	{
		while ((anterior->prox != NULL) && (anterior->prox->Valor() != i))
		{
			anterior = anterior->prox;
		}
		if (anterior->prox != NULL)
		{
			temp = anterior->prox;
			anterior->prox = anterior->prox->prox;
			delete temp;
		}
	}
}

return *this;
}

bool Lista::Pertence (int i)
{
No * aux = cabeca;
while ((aux != NULL) && (aux->Valor() != i))
{
	aux = aux->prox;
}

return (aux != NULL);
}

ostream& operator<<(ostream&o, Lista& l)
{
if( l.cabeca!=NULL)
{
	o << l.cabeca->Valor();
	for(No* p=l.cabeca->Prox(); p!=NULL; p=p->Prox())
		o << ' ' << p->Valor();
}

return o;
}

int main (void)
{
Lista l;
//Inserir alguns elementos
l.Inserir(3).Inserir(2).Inserir(4).Inserir(1);
//Mostrar a lista no ecran
cout << l << endl;
//Percente
int x = 4;
cout << "O elemento " << x << " pertence 'a lista: " << l.Pertence(x) << endl;
x = 5;
cout << "O elemento " << x << " pertence 'a lista: " << l.Pertence(x) << endl;
//Remover
l.Remover(1).Remover(4).Remover(3);
cout << "Apos remocao a lista = " << l << endl;

system("PAUSE");

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja encontrei a soluçao, obrigado na mesma.

O que agora gostava de arranjar era uma lista duplamente ligada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora