Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Implementacion de Listas JIMENEZ FLORES VEIMAR RAMIRO
Implementacion de Listas JIMENEZ FLORES VEIMAR RAMIRO
SISTEMAS
DIAGRAMA DE CLASES
< Interface>
ListaSE<T>
Lista< T >
-private T ini;
+ public boolean vacia(); -private ListaSE<T> sig;
+public void insertar( T dato);
+public ListaSE()
+public void insertar(T dato , int pos);
+public boolean vacia()
+public T eliminar(int pos);
+public void insertar(T dato)
+public T eliminar(T dato);
-private void setDato(T dato)
+public T acceder(int pos);
-private void setSig(ListaSE<T> lista)
+public T acceder(T dato);
+public void insertar(T dato , int pos)
+public boolean buscar(T dato);
+public T eliminar(int pos)
+public int indiceDe(T dato);
+public T eliminar(T dato)
+public int longitud();
+public T acceder(int pos)
+public boolean intercambiar(int
pos1 , int pos2); +public T acceder(T dato)
+public void reemplazar(T dato , int pos ) +public int indiceDe(T dato)
-private String toString(int tam ,NodoDE nodo -private void reemplazar( NodoDE<T> nodo ,T
,int i) dato , int pos,int i )
-private ListaDE<T> clonar(int tam , int i , -private String toString(int tam ,NodoDE nodo
ListaDE<T> clon,NodoDE<T> nodoActual) ,int i)
ini = null;
sig = null;
}
/**
* permite saber el estado actual de la lista
*/
public boolean vacia(){
return ini == null;
}
/**
* insertar el dato al final de la lista
* param -> dato a insertar de clase T
* return nada
*/
public void insertar(T dato){
if( vacia() ){
ni = dato ;
ig = new ListaSE<T>();
}else{
sig.insertar(dato);
}
}
private void setDato(T dato)
ini = dato;
}
private void setSig(ListaSE<T> lista){
sig = lista;
}
public void insertar(T dato , int pos){
T iniAux;
ListaSE<T> sigAux;
if( vacia() ){
if(pos == 0){
ini = dato ;
sig = new ListaSE<T>();
}
}else{
if( pos == 0 ){
sig.insertar(ini,0);
ini = dato ;
}else{
sig.insertar( dato , pos-1 );
}
}
}/**
* elimina el dato de la posicion , en caso de existir y ademas devuelve el dato
eliminado
* param -> pos es un etero postivo incluido el 0
* return el dato eliminado si existiera
*/public T eliminar(int pos){
T res ;
if( vacia() ){
res = null } else{
if ( pos == 0 ){
res = ini ;
ini = sig.ini;
sig = sig.sig;
}else{
res= sig.eliminar(pos-1);
}
}
return res; /**
* elimina el dato de la lsita si existiera
* para -> dato a eliminar de clase T
* return el dato eliminado si existiera
*/
public T eliminar(T dato){
T res;
if( vacia() ){
res = null } else{
if(ini == dato ){
res = ini ;
ini = sig.ini;
sig = sig.sig; } else{
res = sig.eliminar(dato)
} return res;
/** * accede al dato de la posicion pos si existiera
* param -> pos entero positivo incluido 0
* return el dato accedido
* public T acceder(int pos){
T res;
if( vacia() ){
res = null } else{
if( pos == 0 ){
res = ini ;
}else{
res = sig.acceder( pos-1);
}
} return res;
} /**
* acceder al dato de la coleccion
* param -> dato a ser accedido de clase T
* return dato accedido
*/public T acceder(T dato){
T res ;
if( vacia() ){
res = null;
}else{
if(ini.equals(dato) ){
res = ini ;
}else{
res = sig.acceder(dato) ;
}
}
return res;
} /**
* inserta dato en la posicion pos
* param -> dato de clase T a insertar
* param -> pos en la que se quiere insertar pos >= 0 entero
* return nada
*/ public boolean buscar(T dato){
boolean res ;
if( vacia() ){
res =false;
}else{
if(ini.equals(dato) ){
res = true ;
}else{
res = sig.buscar(dato) ;
}
} return res;
}
public int indiceDe(T dato){
int res;
if( vacia() ){
res = -1;
}else{
if(ini == dato ){
res = 0;
}else{
res = sig.indiceDe(dato);
}
return res;
}
public int longitud(){
int res;
if(ini == null){
res = 0 ;
}else{
res = 1 + sig.longitud();
} return res;
}
public boolean intercambiar(int pos1 , int pos2){
boolean sol= false;
if( !vacia() ){
if(sig.ini == null){
sol = ini +"";
}else{
sol = ini +", "+sig.toString2() ;
}
return sol;
}
public String toString (){
String sol ="[";
if( vacia() ){
sol = sol+"]";
}else{
sol = sol + toString2() +"]";
}
return sol;
}
private T buscarUlt(){
T ult ;
if(sig.ini == null ){
ult = ini;
}else{
ult = sig.buscarUlt();
}
return ult;
}
public void recorrer(int pos){
if( ini != null ){
if(longitud() != 1 ){
recorrer(pos, 0);
}
}
}
private void recorrer(int pos , int i){
ListaSE<T> aux1,aux2;
if(i < pos){
T iniUlt = buscarUlt();
vaciarPenSig(iniUlt);
aux1 = new ListaSE<T>();
aux2 = sig ;
aux1.setDato(ini);
aux1.setSig(aux2);
ini = iniUlt;
sig = aux1;
recorrer(pos,i+1);
}
private void vaciarPenSig( T iniUlt ){
if(sig.ini!= null){
if(sig.ini.equals(iniUlt) && sig.sig.ini == null){
sig.setDato(null);
sig.setSig(null);
}else{
sig.vaciarPenSig( iniUlt );
}
}
if( ini!=null){
recorrer(1);
int tam =longitud();
if(tam >2)
invertir(tam-1,1);
}
}
ListaSE<T> aux1,aux2;
if(i < tam){
T iniUlt = buscarUlt();
vaciarPenSig(iniUlt);
aux1 = new ListaSE<T>();
aux2 = sig ;
aux1.setDato(iniUlt);
aux1.setSig(aux2);
sig= aux1;
sig.invertir(tam,i+1);
}
}
public boolean equals( Lista<T> otraLista){
boolean sol = false;;
if( !vacia() && !otraLista.vacia() ){
int tam = longitud();
if(tam == otraLista.longitud() ){
sol = equals(otraLista ,tam,0);
}
return sol;
}
}else{
sol = false;
}
return sol;
}
tam = longitud();
}
return lista;
}
if( vacia() ){
int tam = otraLista.longitud();
insertar(0,tam,otraLista);
}else{
if(sig.ini == null){
int tam = otraLista.longitud();
insertar(0,tam,otraLista);
}else{
sig.insertarTodos(otraLista);
}
}
}
private void insertar(int i,int tam,Lista<T> otraLista){
if( i < tam ){
T datoOtra = otraLista.acceder(i);
insertar(datoOtra);
insertar( i+1 ,tam,otraLista);
}
}
}
--------------------------------------
package estDatLin.EstLin;
public class ListaSEC<T> implements Lista<T>{
private NodoSE<T> ini;
/**
* permite saber el estado actual de la lista
*/
public ListaSEC(){
ini = null;
}
public NodoSE<T> getIni(){
return ini;
}
/**
* insertar el dato al final de la lista
* param -> dato a insertar de clase T
* return nada
*/
public void insertar(T dato){
NodoSE<T> q,ult ;
q = new NodoSE<T>(dato);
if( vacia() ){
ini = q;
ini.setSuc(q);
}else{
ult = buscarUlt(ini,ini);
ult.setSuc(q);
q.setSuc(ini);
}
}
aux = iniAux.getSuc();
if(aux== ini){
elNodo = iniAux ;
}else{
elNodo = buscarUlt(ini,iniAux.getSuc() );
}
return elNodo;
}
public void insertar(T dato , int pos){// q el nodo que vamos insertar
NodoSE<T> ult, s ,q ,p,antP;
if( vacia() ){
ini = new NodoSE<T>(dato);
}else{
q = new NodoSE(dato);
ult = buscarUlt(ini,ini);
if( pos == 0 ){
s = ini.getSuc();
q.setSuc(s);
ult.setSuc(q);
ini = q;
}else{
if(pos == longitud() ){
ult = buscarUlt(ini,ini);
ult.setSuc(q);
q.setSuc(ini);
}else{
p = buscar(ini,pos);
antP = buscar(ini,pos-1);
antP.setSuc(q);
q.setSuc(p);
}
}
}
/**
* elimina el dato de la posicion , en caso de existir y ademas devuelve el dato
eliminado
* param -> pos es un etero postivo incluido el 0
* return el dato eliminado si existiera
*/
public T eliminar(int pos){
T res;
NodoSE<T> q,suc,ult,antQ;
if( vacia() ){
res = null;
}else{
if(pos == 0 ){
q = buscar(ini,pos) ;
res = q.getDato();
suc = q.getSuc();
if( q==suc ){
ini = null;
}else{
ult = buscarUlt(ini,ini);
ini = suc;
ult.setSuc(suc);
}else{
q = buscar(ini,pos);
res = q.getDato();
antQ = buscar(ini,pos-1);
suc = q.getSuc();
antQ.setSuc(suc);
}
}
return res;
}
/**
* elimina el dato de la lsita si existiera
* para -> dato a eliminar de clase T
* return el dato eliminado si existiera
*/
public T eliminar(T dato){
T res;
NodoSE<T> p,antP,s;
if( vacia() ){
res = null;
}else{
p = buscar(ini, dato);
if(p == null ){
res = null;
}else{
antP = buscarAnt(ini,p);
res = p.getDato();
s = p.getSuc();
antP.setSuc(s);
}
}
return res;
}
}else{
elNodo = buscar( i.getSuc(), dato);
}
return elNodo;
}
if(i.getSuc() == p){
elNodo = i ;
}else{
if(i.getSuc() == ini){
elNodo = null;
}else{
elNodo = buscarAnt( i.getSuc(), p);
}
}
return elNodo;
}
/**
* accede al dato de la posicion pos si existiera
* param -> pos entero positivo incluido 0
* return el dato accedido
*/
if( vacia() ){
res = null;
}else{
if(pos < longitud() ){
p = buscar(ini, pos);
res = p.getDato();
}else{
res = null;
}
}
return res;
}
/**
* acceder al dato de la coleccion
* param -> dato a ser accedido de clase T
* return dato accedido
*/
return res;
}
/**
* inserta dato en la posicion pos
* param -> dato de clase T a insertar
* param -> pos en la que se quiere insertar pos >= 0 entero
* return nada
*/
NodoSE<T> p ;
if( vacia() ){
res = false;
}else{
p = buscar(ini,dato);
if(p == null){
res = false;
}else{
res = true;
}
}
return res;
}
}
return indice;
}
if(i.getDato().equals(dato)){
res = 0 ;
}else{
if(i.getSuc() == ini ){
res = -1;
}else{
res = buscarInd( i.getSuc(), dato) ;
if(res !=-1) res++;
}
return res;
}
}else{
if(i.getSuc() == ini ){
cont = cont;
}else{
cont = 1+tamanio(i.getSuc()) ;
}
}
return cont;
}
}else{
reemplazar(nodoActual.getSuc() , dato , pos , i+1 );
}
}
if( !vacia() ){
NodoSE<T> nodo1 = buscar(ini, pos1);
NodoSE<T> nodo2 = buscar(ini, pos2);
T dato1 = nodo1.getDato() ;
T dato2 = nodo2.getDato() ;
if(dato1.equals(dato2) ){
sol = true;
}
}
return sol;
}
T datoActual = nodoActual.getDato();
T otroDato = otraLista.acceder(i);
if( datoActual.equals(otroDato)){
sol = true && equals( nodoActual.getSuc() ,otraLista , tam , i+1 ) ;
}
}
return sol;
}
if( vacia() ){
sol = false;
}else{
int tam = longitud() ;
sol = equals(ini,otraLista , tam , 0 );
}
return sol;
}
private ListaSEC<T> clonar( NodoSE<T> nodoActual ,int tam , int i , ListaSEC<T> clon
){
return clon;
}
if( vacia() ){
sol = sol + "]";
}else{
int tam = longitud() ;
sol = sol + toString ( ini ,tam , 0) + "]" ;
}
return sol ;
}
private void invertir( NodoSE<T> nodoActual , NodoSE<T> ult ,int tam ,int i){
this.dato = dato;
sucesor = null;
public T getDato(){
return dato;
}
}
-----------------------------------------------------
package estDatLin.EstLin;
return sucesor;
}
return antecesor;
}
public T getDato(){
return dato;
}
}
-----------------------------------------------------------------
package estDatLin.EstLin;
public ListaDE(){
ini = null;
}
/**
* insertar el dato al final de la lista
* param -> dato a insertar de clase T
* return nada
*/
public void insertar(T dato){
NodoDE<T> p ,ult;
p = new NodoDE<T>(dato);
if( vacia() ){
ini = p ;
}else{
ult = buscarUlt(ini);
ult.setSuc(p);
p.setAnt(ult);
}
}
if(nodoActual.getSuc()!= null){
nodoActual= buscarUlt(nodoActual.getSuc() );
}
return nodoActual;
}
public void insertar(T dato , int pos){// q nodo a insertar y p nodo a buscar
NodoDE<T> q,p,a ;
if( vacia() ){
if(pos == 0 ){
ini = new NodoDE<T>(dato);
}
}else{
if( pos == 0 ){
p = buscar(ini,pos);
q = new NodoDE<T>(dato);
q.setSuc(p);
p.setAnt(q);
ini = q ;
}else{
if(pos == longitud() ){
p = buscar(ini,pos-1);
q = new NodoDE<T>(dato);
p.setSuc(q);
q.setAnt(p);
}else{
p = buscar(ini,pos);
a = p.getAnt();
q = new NodoDE<T>(dato);
a.setSuc(q);
q.setAnt(a);
p.setAnt(q);
q.setSuc(p);
}
}
/**
* elimina el dato de la posicion , en caso de existir y ademas devuelve el dato
eliminado
* param -> pos es un etero postivo incluido el 0
* return el dato eliminado si existiera
*/
public T eliminar(int pos){
T res;
if( vacia() ){
res = null;
}else{
NodoDE<T> q,a,s,ult;
if(q == ini ){
s.setAnt(a);
ini = s;
}
}else{
if(q == ult ){
a.setSuc(s);
}else{
s.setAnt(a);
a.setSuc(s);
}
}
}else{
res = null;
}
}
return res;
}
if(pos == 0 ){
elNodo = q;
}else{
elNodo = buscar(q.getSuc() , pos-1);
}
}else{
elNodo = null;
}
return elNodo;
}
private NodoDE<T> buscar(NodoDE<T> q , T dato){
NodoDE<T> elNodo;
if(q == null){
elNodo = null;
}else{
if(q.getDato().equals(dato) ){
elNodo = q;
}else{
elNodo = buscar(q.getSuc() , dato);
}
return elNodo;
}
}
return contador;
}
/**
* elimina el dato de la lsita si existiera
* para -> dato a eliminar de clase T
* return el dato eliminado si existiera
*/
public T eliminar(T dato){ // p nodo donde vive el dato a eliminar
T res ;
NodoDE<T> p,a,s,ult;
if( vacia() ){
res = null;
}else{
p = buscar(ini,dato);
if(p == null ){
res = null;
}else{
ult = buscarUlt(ini);
if(p == ini ){
a = p.getAnt();
s = p.getSuc();
s.setAnt(a);
ini = s;
res =p.getDato();
}else{
if(p == ult){
s = p.getSuc();
a = p.getAnt();
a.setSuc(s);
res = p.getDato();
}else{
s = p.getSuc();
a = p.getAnt();
a.setSuc(s);
s.setAnt(a);
res = p.getDato();
}
}
}
}
return res;
}
/**
* accede al dato de la posicion pos si existiera
* param -> pos entero positivo incluido 0
* return el dato accedido
*/
if( vacia() ){
res = null;
}else{
if( pos== 0 ){
res = ini.getDato() ;
}else{
p = buscar(ini,pos);
if( p == null ){
res = null;
}else{
res = p.getDato();
}
}
return res;
}
/**
* acceder al dato de la coleccion
* param -> dato a ser accedido de clase T
* return dato accedido
*/
if( p == null ){
res = null;
}else{
res = p.getDato();
}
}
return res;
}
/**
* inserta dato en la posicion pos
* param -> dato de clase T a insertar
* param -> pos en la que se quiere insertar pos >= 0 entero
* return nada
*/
boolean res;
NodoDE<T> p ;
if( vacia() ){
res = false;
}else{
p = buscar(ini,dato);
if( p == null ){
res = false;
}else{
res = true;
}
}
return res;
}
return res;
}
}
return res;
}
}
}
return sol;
}
}
}
T dato1 = nodo1.getDato();
T dato2 = nodo2.getDato();
if( dato1.equals(dato2) ){
sol = true;
}
}
return sol;
}
return sol;
}
if( ini.getSuc()!=null ){
NodoDE<T> ult = buscarUlt(ini);
}
}
private void insertarTodos(Lista<T> otraLista , int tam , int i){
if(i < tam ){
T dato = otraLista.acceder(i);
insertar(dato);
insertarTodos(otraLista , tam , i+1);
}else{
sol =false;
}
return sol;
}
if( vacia() ){
sol = false;
}else{
sol = equals( otraLista, longitud() , 0);
}
return sol;
}
package estDatLin.EstLin;
public class ListaDEC<T> implements Lista<T>{
private NodoDE<T> ini;
public ListaDEC(){
ini = null;
}
/**
* permite saber el estado actual de la lista
*/
public boolean vacia(){
/**
* insertar el dato al final de la lista
* param -> dato a insertar de clase T
* return nada
*/
public void insertar(T dato){//p seria el nodo a insertar
NodoDE<T> p,ult;
p = new NodoDE<T>(dato);
if( vacia() ){
ini = p ;
p.setSuc(p);
p.setAnt(p);
}else{
ult = ini.getAnt();
ult.setSuc(p);
p.setSuc(ini);
p.setAnt(ult);
ini.setAnt(p);
}
}
public void insertar(T dato , int pos){// q nodo a insertar y p nodo que vive en esa
posicion
NodoDE<T> a,s,p,q;
if( vacia() ){
if(pos == 0 ){
}else{
p = buscar(ini,pos);
q = new NodoDE<T>(dato);
a = p.getAnt();
q.setSuc(p);
q.setAnt(a);
p.setAnt(q);
a.setSuc(q);
}
}
/**
* elimina el dato de la posicion , en caso de existir y ademas devuelve el dato
eliminado
* param -> pos es un etero postivo incluido el 0
* return el dato eliminado si existiera
*/
public T eliminar(int pos){
T res;
if( vacia() ){
res = null ;
}else{
NodoDE<T> s,q,a;
q = buscar(ini,pos);
a = q.getAnt();
s = q.getSuc();
res = q.getDato();
a.setSuc(s);
s.setAnt(a);
if(q == ini) ini = s ;
if(q == a) ini = null;
}
return res;
}
}else{
q = buscar(ini,dato);
if(q == null ){
res = null;
}else{
res = q.getDato();
a = q.getAnt();
s = q.getSuc();
s.setAnt(a);
a.setSuc(s);
if(q==ini){
ini =s;
}
if(s == q ){
ini = null;
}
}
return res;
}
/**
* accede al dato de la posicion pos si existiera
* param -> pos entero positivo incluido 0
* return el dato accedido
*/
if( vacia() ){
res = null;
}else{
if( pos == 0 ){
res = ini.getDato();
}else{
q = buscar(ini,pos);
res= q.getDato() ;
}
return res;
}
/**
* acceder al dato de la coleccion
* param -> dato a ser accedido de clase T
* return dato accedido
*/
if( vacia() ){
res = null;
}else{
if(ini.getDato().equals(dato) ){
res = ini.getDato();
}else{
q = buscar( ini , dato);
if(q == null){
res = null;
}else{
res = q.getDato();
}
}
return res;
}
/**
* inserta dato en la posicion pos
* param -> dato de clase T a insertar
* param -> pos en la que se quiere insertar pos >= 0 entero
* return nada
*/
if( vacia() ){
res = false;
}else{
if(ini.getDato().equals(dato) ){
res = true ;
}else{
q = buscar( ini , dato);
if(q == null){
res = false;
}else{
res = true;
}
}
return res;
}
}
return contador;
}
if(q.getDato().equals(dato)){
res = 0 ;
}else{
if(q.getSuc()== ini ){
res = -1;
}else{
res= buscarPos(q.getSuc(),dato);
if(res!=-1)res ++;
}
}
return res;
}
}
return res;
}
if(!vacia() ){
int tam = longitud();
if(pos1 < tam && pos2 < tam ){
sol = true;
}
}
return sol;
}
}
}
T dato1 = nodo1.getDato();
T dato2 = nodo2.getDato();
if( dato1.equals(dato2) ){
sol = true;
}
}
return sol;
}
}else{
sol =false;
}
return sol;
}
if( vacia() ){
sol = false;
}else{
sol = equals( otraLista, longitud() , 0);
}
return sol;
}
return clon;
}
return sol;
}
public String toString (){
String sol ="[";
if( vacia() ){
sol = sol + "]";
}else{
int tam = longitud() ;
sol =sol+ toString(tam,ini,0)+ "]";
}
return sol ;
}
if(nodoActual.getSuc()!= ini){
nodoActual = buscarUlt(nodoActual.getSuc() );
}
return nodoActual;
}
if( ini.getSuc()!=null ){
NodoDE<T> ult = buscarUlt(ini);
}
}