Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clasedelistas PDF
Clasedelistas PDF
ESTRUCTURAS DE DATOS
2006
LISTAS
Definición.
Representación de Listas.
Lista Lineal Simplemente Enlazada.
Operaciones TAD LLSE.
Implementación Dinámica.
Otras Listas.
Ejercicios.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTAS
DEFINICIÓN
Lista Info sig Info sig Info sig Info sig Info sig
Lista Info sig Info sig Info sig Info sig Info sig
Operacionescon listas:
Recorrido de la lista.
Inserción de un elemento.
Borrado de un elemento.
Búsqueda de un elemento.
Operaciones:
CONSTRUCTORAS
MODIFICADORAS
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir
el elemento al inicio de la lista.
InsertarInicio: Lista x tipo_base Lista
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir
el elemento al final de lista.
InsertarFinal: Lista x tipo_base Lista
MODIFICADORAS
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir
el elemento en un nodo que sigue al nodo apuntado por p.
InsertarDespues: Lista x tipo_base Lista
MODIFICADORAS
Dada una lista, forma la lista resultante de eliminar el elemento situado al final
de la lista (último elemento).
ElimFinal: Lista Lista
Dada una lista, forma la lista resultante de eliminar el nodo que sigue al nodo
apuntado por p.
ElimDespues: Lista Lista
ANALIZADORAS
Dada una lista, hace el recorrido por la lista mostrando el campo info.
RecorrerList: Lista Lista
Dada una lista, devuelve el valor verdadero si la lista está vacía y falso en caso
contrario.
ListaVacia: Lista lógico
ANALIZADORAS
DESTRUCTORA
DEFINICIÓN
# define NULL 0
struct lista
{
tipo_base info;
lista *prox;
};
Dada una lista y un valor e, del tipo base, forma una nueva lista al
añadir el elemento al final de lista.
void InsertarFinal(lista **p, tipo_base dato)
{ lista *n,*m;
m=*p;
while(m->prox!=NULL)
m=m->prox;
n=new lista;
n->info=dato;
n->prox=NULL;
m->prox=n;
};
Dada una lista y un valor e, del tipo base, forma una nueva lista al
añadir el elemento en un nodo que sigue al nodo apuntado por p.
void InsertarDespues(lista **p,tipo_base dato)
{lista *q;
if (p==NULL)
{ cout<<" Evite Inserción";
exit(1); }
else
{ q=new lista;
q->info=dato;
q->prox=(*p)->prox;
(*p)->prox=q;
}
};
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
void ElimPrim(lista**p)
{ lista *n;
n=*p;
*p=(*p)->prox;
delete n;
};
Dada una lista, forma la lista resultante de eliminar el nodo que sigue
al nodo apuntado por p.
void ElimDespues(lista **p)
{ lista *q;
if (p==NULL)
{ cout<<" Evite Eliminar";
exit(1); }
else
{ q=(*p)->prox;
if (q==NULL)
{ cout<<" Nodo no existe ";
exit(1); }
else
{ (*p)->prox=q->prox;
delet (q); }
}
Ing. M.Sc. Fulbia Torres
}; Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
q=*p;
while (q!=NULL)
{ cout<<q->info<<" ";
q=q->prox;
}
}; Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
q=*p;
while (q!=NULL)
{ conta=conta+1;
q=q->prox; }
return (conta);
};
delete *p;
}
Izq info der Izq info der Izq info der Izq info der
DEFINICIÓN
# define NULL 0
struct lista
{ lista *izq;
tipo_base info;
lista *der;
};
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir el
elemento al inicio de la lista.
n=new lista;
n->izq=NULL;
n->info=k;
n->der=*p;
(*p)->izq=n;
*p=n;
};
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir el
elemento al final de la lista.
while(m->der!=NULL)
{ m=m->der; }
n=new lista;
n->info=k;
n->der=NULL;
m->der=n;
n->izq=m;
}; Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir el
elemento a la izquierda del nodo apuntado por p.
void InsertIzqD(lista **p, tipo_base k)
{ lista *n,*m,*q;
q=*p;
n=new lista;
n->info=k;
n->izq=q->izq;
n->der=q;
if (q->izq!=NULL)
{ m=q->izq;
m->der=n; }
else p=n;
q->izq=n; Ing. M.Sc. Fulbia Torres
}; Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
Dada una lista y un valor e, del tipo base, forma una nueva lista al añadir el
elemento a la derecha del nodo apuntado por p.
void InsertDerD(lista **p, tipo_base k)
{ lista *n,*m,*q;
q=*p;
n=new lista;
n->info=k;
if (q==NULL)
{ n->izq=NULL;
n->der=NULL;
q=n; }
else
{ m=q->der;
if (m!=NULL) m->izq=n;
n->der=m;
n->izq=q;
Ing. M.Sc. Fulbia Torres
q->der=n; }
Asignatura: Estructuras de Datos
}; Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
n=*p;
*p=(*p)->der;
(*p)->izq=NULL;
delete n;
};
n=*p;
while(n->der!=NULL)
{ n=n->der; }
m=n->izq;
m->der=NULL;
delete n;
}; Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
void ElimDerD(lista**p)
{ lista *q,*n,*m;
q=*p;
n=q->der;
if (n==NULL) {cout << “Evite eliminar”;
exit(1); }
else
{ q->der=n->der;
m=n->der;
m->izq=n->izq;
delete n;} Ing. M.Sc. Fulbia Torres
} Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA LINEAL DOBLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
void ElimIzqD(lista**p)
{ lista *q,*n,*m;
q=*p;
n=q->izq
if (n == NULL) {cout << “Evite eliminar”;
exit(1); }
else
{q->izq=n->izq;
m=n->izq;
m->der=q;
delete n; }
} Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTAS CIRCULARES
Ver figura.
Info sig Info sig Info sig Info sig Info sig
DEFINICIÓN
# define NULL 0
struct ListaCirc
{
tipo_base info;
ListaCirc *prox;
};
Dada una lista circular y un valor e, del tipo base, forma una nueva lista
circular al añadir el elemento al iniciar la lista.
void InsertarLCSE(ListaCirc **p, int dato)
{
ListaCirc *q;
q=new ListaCirc;
q->info=dato;
*p=q;
q->prox=*p;
Dada una lista circular y un valor e, del tipo base, forma una nueva lista
circular al añadir el elemento después del nodo apuntado por p .
n=*p;
q=new ListaCirc;
q->info=dato;
q->prox=n->prox;
n->prox=q;
*p=q;
} Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA CIRCULAR SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
Dada una lista circular, forma la lista circular resultante de eliminar el nodo
que sigue al nodo apuntado por p.
void EliminarDespLCSE(ListaCirc **p)
{
ListaCirc *q;
if ((*p)==NULL){
cout<< "Evitar Eliminar";
//exit(1);
}
else{
q=(*p)->prox;
(*p)->prox=q->prox;
delete(q); Ing. M.Sc. Fulbia Torres
} Asignatura: Estructuras de Datos
} Barquisimeto 2006
LISTA CIRCULAR SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
q=z->prox;
while (q!=z)
{ cout<< q->info <<" ";
q=q->prox;
}
cout << q->info <<" "; Ing. M.Sc. Fulbia Torres
} Asignatura: Estructuras de Datos
Barquisimeto 2006
LISTA CIRCULAR SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
cont=0;
r=NULL;
q=p->prox;
while (q!=r)
{
if(r==NULL) r=q;
cont=cont+1;
q=q->prox;
} Ing. M.Sc. Fulbia Torres
return (cont); Asignatura: Estructuras de Datos
} Barquisimeto 2006
LISTA CIRCULAR SIMPLEMENTE ENLAZADA
IMPLEMENTACIÓN DINÁMICA
q=*p;
q=q->prox;
delete (q);
}
r=NULL;
p=L1->prox;
while (r!=p)
{
if (r==NULL) r=p;
cout << p->info <<" ";
p=p->prox;
} Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
} Barquisimeto 2006
Función que concatena dos listas circulares simplemente enlazadas.
n=*p;
m=*q;
if (n==NULL) n=m;
else if(m!=NULL)
{
r=n->prox;
n->prox=m->prox;
m->prox=r;
n=m;
}
return n;
}
GRACIAS POR SU
ATENCIÓN
HASTA LA PRÓXIMA
CLASE