GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Lista simplesmente encadeada


#1

Estou precisando de um tutorial de como usar estruturas de dados sob o formato de Listas Simplesmentes encadeadas. No momento, o meu interesse é como devo proceder para "andar" sobre cada um dos nos dessa estrutura.
Alguem pode me ajudar ? :oops:


#2

Voce quer fazer no braco ou simplesmente usar alguma ja existente? No Java padrao tem a classe LinkedList (java.util.LinkedList ) que serve para esse proposito.

Rafael


#3

eu to cmo esse problema, tenho que fazer no braço, ai eh foda!!

alguem tem um help.

o que eu fiz

classe que cria um objeto node

package Abstract.LinkedList;
public class Node {
	private Object datum;
	private Node prox;
	public Node(Object datum)
	{
		this.datum=datum;
		prox=null;
	}
	public Object getDatum() {
		return datum;
	}
	public void setDatum(Object datum) {
		this.datum = datum;
	}
	public Node getNext() {
		return prox;
	}
	public void setNext(Node prox) {
		this.prox = prox;
	}
}

package Abstract.LinkedList;
import Abstract.Vector.Lista;
public class listaES extends Lista {
	protected Node head=null;
	protected Node tail=null;
	protected Node p;
	protected Node novoNode;
	protected Node nminus1;
	protected Node nplus1;
	protected int cont;
	public boolean esvaziarLista() {
		// TODO Auto-generated method stub
		return false;
	}
	public boolean excluir(int n) {
		// TODO Auto-generated method stub
		return false;
	}
	public Object exibir(int n) {
		// TODO Auto-generated method stub
		return null;
	}
	public boolean inserir(int n, Object o) {
		if(head==null)
			head=new Node(o);
		else if(n==0){
			p=head;
			while(p.getNext()!=null)
				p=p.getNext();
			p.setNext(new Node(o));
		}
		if(n>0){//INSERIR EM UMA POSIÇAO N
			cont=0;
			while(p.getNext()!=null){
				p=p.getNext();
				cont+=1;
				if(cont==n){
					while(p.getNext()!=null){
						p=p.getNext();
						cont+=1;
						if(cont==n-1)
							nminus1=p;
						if(cont==n)
							nplus1=p;
						nminus1.setNext(new Node(o));
						//nplus1.setNext();
						//executar codigo para inserir na posição desejada
                                                 // [b]AHHH COMO EU RESOLVO ISSO[/b]
					}
				}
				else if(n>cont){
					// numero n, maior que o tamanho da lista
					//throw IllegalArgumentException();
				}
			break;
			}
		}
		return true;
	}
	public boolean listaVazia() {
		boolean x=true;
		if(head!=null)
			//return false caso a lista tenha alguma posiçao
			x=false;
	return x;
	}
	public int qtdElementos() {
		cont=0;
		while(p.getNext()!=null)
		{
			p=p.getNext();
			cont+=1;
		}
		return cont;
	}
}

#4

Para estruturas de dados em geral:

http://www.brpreiss.com/books/opus5/html/book.html


#5

Eu realmente terei de fazre a lista no braço.
Agora a minha duvida, e quanto à navegação dentro da lista: Se eu quiser criar um metodo que retorne o ultimo da lista, devo percorrer por todos da lista simplesmente encadeada ou existe um outro caminho "mais curto" ?


#6

depende da sua lista
se vc tiver referencia apenas para o primeiro elemento, tera q percorrer tudo.

ha diversos tipos de listas, como listas duplamente encadeadas (vc navega indo e voltando), q podem ter referencia para outros elementos q nao o primeiro


#7

Como já citei anteriormente, o problema envolve por enquanto, o conceito de lista simplesmente encadeada.


#8

No momento, estou precisando de um exemplo de fila e pilha para que eu possa aplicar o conceito de lista simplesmente encadeada. Agora realmente é um trabalho de faculdade e preciso de um exemplo de cada um deles o mais original possivel

Agradeço, desde ja pelo apoio que estou recebendo neste problema.


#9

O que você quis dizer com original? Espero que não signifique "pronto" pra você poder entregar direto pro professor. Caso for isso, acho que você terá que procurar sozinho, pois duvido muito que alguém aqui irá fazer o seu trabalho de faculdade....

O link que o Márcio é bem completo... você já deu uma olhada?

[]´s


#10

O que eu quis dizer, é que os exemplos que eu tinha em mente eram simples demais para serem implementados. Mas de qualquer maneira, valeu pela ajuda!!


#11

OK, desculpe-me pela interepretação errada...

Um livro que eu li um tempo atrás e que explica passo-a-passo as estruturas de dados fundamentais é esse:

http://www.temporeal.com.br/produtos.php?id=162330

O livro é barato(esse preço da tempo real esta mais caro do que o preço que eu conhecia.. acho que esta desatualizado) e acho que você encontra ele na sua biblioteca facilmente... vale a pena conferir

[]´s


#12

Tudo bem.


#13

Alguem poderia me ajudar com um exe de lista?
O Exercicio pede: Usando Lista Simplesmente Encadeada, implementar um Cadastro de Clientes de uma Empresa com as seguintes especificações:

Campos: Código, Nome e Cidade;

Operações: Inclusão (no final da Lista), Exclusão (de qualquer ponto da Lista), Pesquisa e, se o usuário desejar, Alteração (de qualquer ponto da Lista) e, por fim, Listagem dos dados na tela;

Interface: Um Menu para a escolha das operações acima e Tela que apresente os dados e permita alterações. No Apêndice dessa Lista de Exercícios são oferecidas sugestões de interface.

Estou tentando fazer mais muitas duvidas surgem... vou colocar o que eu ja inicie abaixo... se alguemk puder me dar uma luz de como começar, agradeço!!!!
:smiley:

Lcad lista_cad = new Lcad();   
//Cadastro   
public void Cadastrar_Cliente() {   
 Inserir_Nome();   
 Inserir_Cod();
 Inserir_Cidade();
{   
//Inserir cadastro   
 public void Inserir_Cod () {    
 String cod;   
 int opcao = 1;    
 for (int i=0; i < 10; i++) {   
    if (opcao == 1) {   
     System.out.println ("Digite o codigo a ser cadastrado");   
 cod = Leitura.leiaString();    
     lista_cad.insereNo_Fim (new StringNoSimples (cod));
public void Inserir_Nome () {    
 String nome;   
 int opcao = 1;    
 for (int i=0; i < 10; i++) {   
    if (opcao == 1) {   
     System.out.println ("Digite o nome a ser cadastrado");   
 nome = Leitura.leiaString();    
     lista_cad.insereNo_Fim (new StringNoSimples (nome));     
 public void Inserir_Cidade () {    
 String cid;   
 int opcao = 1;    
 for (int i=0; i < 10; i++) {   
    if (opcao == 1) {   
     System.out.println ("Digite a cidade a ser cadastrado");   
 cid = Leitura.leiaString();    
     lista_cid.insereNo_Fim (new StringNoSimples (cid));
 System.out.println ("Deseja inserir mais um cadastro?");    
 System.out.println ("1) Sim");   
 System.out.println ("2) Nao");   
 opcao = Leitura.leiaInt();   
 }   
 }    
}   
//Lista encadeada   
public class Lcad {   
   StringNoSimples primeiro, ultimo;   
   int numero_nos;   
 public Lcad() {   
 primeiro = ultimo = null;   
 numero_nos = 0;      
 }   
 public void insereNo_Ini (StringNoSimples novoNo) {   
   novoNo.prox = null;   
    if (primeiro != null) {   
       novoNo.prox = primeiro;   
       primeiro = novoNo;   
    }    
    else {    
    if (primeiro == null) {   
        primeiro = novoNo;   
        ultimo = novoNo;   
    }   
    }   
 }   
 public void insereNo_Fim (StringNoSimples novoNo) {   
    novoNo.prox = null;   
    if (primeiro == null) {   
       primeiro = novoNo;   
       ultimo = novoNo;   
    }   
    if (ultimo != null) {   
       ultimo.prox = novoNo;   
       ultimo = novoNo;   
    }   
 }   
 public void listarNo() {   
    StringNoSimples temp_no = primeiro;   
    int i = 0;   
    while (temp_no != null) {   
       System.out.println ("Cliente: "+temp_no.valor);   
       temp_no = temp_no.prox;   
       i++;   
    }   
 }   
}  
    }
}

#14