Você está na página 1de 11

1.

 Publicado em: 09/04/2009 23:18:44 

Olá galera estou apredendo estrutura da dados estou verificando uma


classe lista mas a única coisa que eu não entendi foi o método remover
alguém pode me explicar...é muito complexo...todos os outros eu entendi
de menos o método remover vo deixar a classe ai quem souber por favor
me explique..!
1. /* CLASSE: LISTA ENCADEADA 
2.  * inserir(x) -> insere o elemento na lista 
3.  * pesquisar(x) -> procura pela chave na lista, retorna o nodo se o elemento for e
ncontrado e NULL caso contrário 
4.  * remover(x) -> remove um nodo das lista de acordo com a chave 
5.  * imprimir(x) -> imprime todos os nodos da lista 
6. */  
7.   
8. public class Lista  
9. {  
10.    private NodoLista prim = null;  
11.    private NodoLista ult = null;  
12.      
13.    public void inserir(int chave)  
14.    {  
15.       NodoLista aux = new NodoLista();  
16.         
17.       aux.chave = chave; // preenche o nodo com os dados  
18.         
19.       if(prim == null) // lista VAZIA  
20.          prim = aux; // atualiza o primeiro  
21.       else  
22.          ult.prox = aux;  
23.            
24.       ult = aux; // atualiza o ultimo  
25.    }  
26.      
27.    public NodoLista pesquisar(int chave)  
28.    {  
29.       NodoLista temp;  
30.         
31.       temp = prim;  
32.         
33.       while(temp != null)  
34.       {           
35.          if(temp.chave == chave) // registro encontrado  
36.             break; // abandona o while  
37.               
38.          temp = temp.prox; // avança para o próximo nodo           
39.       }        
40.       return temp; // retorna o nodo  ou null se não encontrado  
41.    }  
42.   
43.    public void remover(int chave)//esse método que eu não entendi  
44.    {  
45.        NodoLista aux, ant;  
46.          
47.        aux = prim;         
48.        ant = null;  
49.          
50.        while(aux != null)  
51.        {  
52.             if(aux.chave == chave) // nodo encontrado  
53.             {  
54.               if(aux == prim) // se o nodo a ser removido for o primeiro...  
55.                    prim = prim.prox;  
56.               else  
57.                    ant.prox = aux.prox;  
58.                      
59.               if(aux == ult) // se o nodo a ser removido for o ultimo...  
60.                    ult = ant;  
61.                      
62.               break;   
63.             }  
64.           ant = aux;  
65.           aux = aux.prox; // avança para o próximo nodo  
66.        }  
67.     }  
68.   
69.    public void imprimir()  
70.    {  
71.       NodoLista aux;  
72.         
73.       aux = prim;  
74.         
75.       while(aux != null)  
76.       {           
77.          System.out.println("Chave: " + aux.chave);  
78.          aux = aux.prox; // avança para o próximo nodo           
79.       }  
80.    }  
81.      
82. }  
83.   
84. class NodoLista  
85. {  
86.    public int chave; // campo CHAVE da lista (pode ser de outro tipo)     
87.    /* INSIRA AQUI os demais campos da lista */  
88.       
89.    public NodoLista prox = null; // referencia para o proximo nodo da lista  
90. }  

1.

HillClimbing
Offline 
Posts: 40

 Publicado em: 09/04/2009 23:18:44 

O que você não entendeu cara?

É que é meio estranho explicar algoritmo...hehehe...pq o que eu posso vir a


falar é o que tah escrito lah no código! Se vc conseguir detalhar mais a sua
pergunta quem sabe eu possa te ajudar!

Abraço!

1.

joaotacio
Offline 
Posts: 32

 Publicado em: 09/04/2009 23:18:44 

Pegue uma folha e uma lápis, escreva o nome dos nodos e os valores
iniciais. Fica mais fácil de entender.

Se vc tem uma lista 


Brasil->Alemanha->Australia->null

aux=pri
ant=null

entao aux=Brasil
ant=null

Se mesmo assim nao entender me avise ok. joaotacio@ig.com.br

_________________
JavaFree.org
1.

gerasampagode
Offline 
Posts: 2

 Publicado em: 09/04/2009 23:18:44 

public void Insere(int x){


No temp = new No();
temp.dado = x;
temp.ref = inicio;
inicio = temp;
JOptionPane.showMessageDialog(null, "Inserindo... " +
temp.dado);
}

public void Remove(int x){ // Remove está errado!!!


No aux, ant = null;
aux = Busca(x); //Chama o Metodo Busca...
JOptionPane.showMessageDialog(null, "Removendo... " +
aux.dado);
if(aux == null){
JOptionPane.showMessageDialog(null, "Numero Nao Existe...");
}else{
if(inicio == aux){//Se o No Removido for o 1º
inicio = aux.ref;
}else{
ant = inicio;
while(ant.ref != aux){
ant = ant.ref;// Ele vai percorrendo a Lista e recebe a referencia do
No anterior de aux
}
ant.ref = aux.ref;
}
aux = null;
}
}

public No Busca(int x){ // Busca está certa!!!


No tmp = inicio; // **naum pode mexer na variavel inicio por isso
vc atribui o valor para uma avariavel auxiliar...
while(tmp != null){
if(tmp.dado == x){
break;
}else{
tmp = tmp.ref; //essa linha mostra que sempre vai indo para o
proximo...
}
}
return tmp;
}

public void ImprimeL(){


No tmp = inicio;
while(tmp != null){
JOptionPane.showMessageDialog(null, tmp.dado);
tmp = tmp.ref;
}
} ' border='0' alt='0'> 

 EvertonJoseBenedicto_0510
Baixar:
688_Lista.zip
Taman
 1 KB
ho:

_________________
Everton
MSN: gerasampagode@hotmail.com
e-mail: blmad@walla.com
1.

gerasampagode
Offline 
Posts: 2

 Publicado em: 09/04/2009 23:18:44 

Entaum pessoal está em anexo no post acima Como implementar


uma lista!!!

flw teh mais... 


_________________
Everton
MSN: gerasampagode@hotmail.com
e-mail: blmad@walla.com

1.

bodao
Offline 
Posts: 1

 Publicado em: 09/04/2009 23:18:44 

Olá pessoal gostaria de saber como criar um metodo removerDoFinal() para


poder implementar uma fila, pois em pilha tudo ok eu consigo remover do
inicio e inserir do inicio, mas na final meu metodo de removerDoFinal esta
dando erro eu levo o "ponteiro" pro final mas nao consigo voltar para o
começo

ai em baixo segue os codigos:


Classe Node ->

1. package ListaDuplaEncadeada;  
2.   
3. /** Implementação da estrutura de dados NODE ****/  
4. public class Node {  
5.   
6.    int info;  
7.   
8.    Node prox;  
9.      
10.    Node ante;  
11.   
12.    public Node(int valor) {  
13.       this.info = valor;  
14.       this.prox = null;  
15.       this.ante=null;  
16.   
17.    }  
18. }/** ***Fim da Classe No*****/  

Classe lista ->

1. package ListaDuplaEncadeada;  
2.   
3. public class List {  
4.    Node i;  
5.   
6.    public List() {  
7.       this.i = null;  
8.   
9.    }  
10.   
11.    public void insereInicio(int valor) {  
12.       if (this.i == null)  
13.          this.i = new Node(valor);  
14.       else {  
15.          Node temp = new Node(valor);// cria um atributo temporario do tipo  
16.          // Node  
17.            
18.          temp.prox = this.i; // o prox recebe as informações do no do começo  
19.          this.i = temp;  
20.          /** 
21.           * o novo no toma o lugar do no anterior, ja que o a informação do 
22.           * no ini foi afastada 
23.           */  
24.   
25.       }// *** Fim da inserção pelo inicio ******/  
26.    }  
27.   
28.    public String info() {  
29.       String x;  
30.       if (this.i == null)  
31.          return ("Lista Vazia");  
32.       else {  
33.          Node temp = this.i;  
34.          x = ""; // inicia o atributo com string ""  
35.          while (temp != null) {  
36.             x = x + " , " + temp.info;  
37.             /** Faz a concatenação com a String * */  
38.             temp = temp.prox;  
39.             /** * Parte para o proximo * */  
40.          }  
41.          return (x);  
42.       }  
43.    }  
44.   
45.    public String removeInicio() {  
46.       String temp = "";  
47.   
48.       if (this.i == null)  
49.          return ("Lista Vazia");  
50.       else {  
51.          temp = "" + this.i.info;  
52.          i = this.i.prox;  
53.          return temp;  
54.       }  
55.    }  
56.   
57.    /** Fim do metodo remover do inicio ** */  
58.   
59.    public int quantNo() {  
60.       Node temp = this.i;  
61.       /** Atribui o Nó i no atributo temporario temp * */  
62.       int c = 0;  
63.       /** atributo auxiliar * */  
64.       while (temp != null) {  
65.          c = c++;  
66.          /** incremento * */  
67.          temp = temp.prox;  
68.          /** passa para o proximo nó * */  
69.       }  
70.       return c;  
71.       /** Retorna a quantidade de nó que tem a lista * */  
72.    }  
73.   
74.    /** Fim do metodo quantNo * */  
75.   
76.    public void insereNoFinal(int valor) {  
77.       if (this.i == null)  
78.          this.i = new Node(valor);  
79.       else {  
80.          Node aux = this.i;  
81.          /** Laço para caminhar pela lista ** */  
82.          while (aux.prox != null) {  
83.             aux = aux.prox;  
84.          }  
85.          Node p = new Node(valor);  
86.          /** atributo auxiliar * */  
87.          aux.prox = p;  
88.          /** inserindo no proximo no depois do nó aux * */  
89.   
90.       }  
91.       /** fim do metodo Inserir no final * */  
92.    }  
93.   
94.    public String removeDoFim() {  
95.       String removido = null; /** Inicialização do atributo do tipo String **/  
96.       if (this.i == null)  
97.          return ("Lista Vazia");  
98.       else {  
99.          /** Percorre a lista até achar o final da lista **/  
100.          while (this.i.prox != null) {  
101.             this.i = this.i.prox;  
102.          }  
103.          removido = "" + this.i.info; /** pega a info do nó anterior a 
i.prox ***/  
104.             
105.          this.i=null;  
106.             
107.             
108.   
109.          return (removido);  
110.   
111.       }  
112.   
113.    }  
114.    public String topo(){  
115.       String resp=null;  
116.       if( this.i==null)  
117.          return("Lista Vazia");  
118.          else  
119.             resp=""+this.i.info;  
120.           return(resp);  
121.                  
122.         
123.    }  
124. }  

Classe Fila ->


package ListaDuplaEncadeada;

1. public class Fila {  
2.   
3.    List x=null;  
4.      
5.    public Fila(){  
6.       x=new List();  
7.    }  
8.      
9.    public boolean filaVazia(){  
10.       if(this.x==null)  
11.            
12.          return(true);  
13.       else  
14.          return(false);  
15.         
16.    }  
17.    public void inserir(int valor){  
18.       x.insereInicio(valor);  
19.    }  
20.      
21.    public String remover(){  
22.       String aux=null;  
23.       aux=x.removeDoFim();  
24.       return(aux);  
25.    }  
26.    public String top(){  
27.       String y=null;  
28.       y=x.topo();  
29.       return y;  
30.    }  
31.      
32.      
33. }  

e a classe de teste

1. package ListaDuplaEncadeada;  
2.   
3. public class testeMain {  
4.      
5.      
6.    public static void main(String[] args) {  
7.         
8.         
9.       Pilha x = new Pilha();  
10.       Fila y =new Fila();  
11.         
12.       x.pop(4);  
13.       x.pop(5);  
14.       x.pop(8);        
15.         
16.       String t,r,z =null;  
17.         
18.       t=x.push();  
19.       r=x.push();  
20.       String o= x.topo();  
21.         
22.         
23.       System.out.println("1° push ="+ t+" " + "topo="+ o +"\n" +"2° push="+r);  
24.         
25.         
26.       String w,k,l,b=null;  
27.       y.inserir(10);  
28.       y.inserir(11);  
29.       y.inserir(12);  
30.         
31.       w=y.remover();  
32.       k=y.remover();  
33.       l=y.remover();  
34.       b=y.top();  
35.         
36.         
37.       System.out.println("primeira remoção="+w + "\n"+"segunda remoção="+k +"\
n"+"terceira remoção="+l+"\n"+"topo da fila="+ b);  
38.         
39.         
40.    }  
41.   
42. }  

com o teste da pilha dá tudo ok, mas no da fila nao consigo remover =/, alguem poderia me
ajudar?

1.

Relacionados

Ajuda: Frameworks ORM (Object-Relacional Mapping)


http://javafree.uol.com.br/topic-849754-Ajuda-Frameworks-ORM-
ObjectRelacional-Mapping.html 
Exibir na tela
http://javafree.uol.com.br/topic-859089-Exibir-na-tela.html 

socketConnection (Obter IP do servidor)


http://javafree.uol.com.br/topic-862137-socketConnection-Obter-IP-do-
servidor.html 

Bingo Urgente!!!!!!!!!!!!!!!!!!
http://javafree.uol.com.br/topic-865527-Bingo-Urgente.html 

Problema ao ler arquivo xml no groovy


http://javafree.uol.com.br/topic-874588-Problema-ao-ler-arquivo-xml-no-
groovy.html 

III Ciclo de Palestra da PUC-PR [Gratuito]


http://javafree.uol.com.br/topic-12570-III-Ciclo-de-Palestra-da-PUCPR-
Gratuito.html 

Todos os fornecedores de KVMs


http://javafree.uol.com.br/topic-855146-Todos-os-fornecedores-de-
KVMs.html 

Lista de Sessões
http://javafree.uol.com.br/topic-855173-Lista-de-Sessoes.html 

Mensagens que não tinham tópicos


http://javafree.uol.com.br/topic-1-Mensagens-que-nao-tinham-topicos.html 

Você também pode gostar