Está en la página 1de 18

Listas Lineales

Clasificación

PILAS
Particularizadas
COLAS

Simplemente Enlazadas

Generalizadas Doblemente Enlazadas


Simple
Circular
Doble
PILA
• Una pila (stack en inglés) es una lista ordinal o
estructura de datos en la que el modo de acceso a
sus elementos es de tipo LIFO (del inglés Last In
First Out, último en entrar, primero en salir) que
permite almacenar y recuperar datos..
.
• Para el manejo de los datos se
cuenta con dos operaciones
básicas: apilar (push), que
coloca un objeto en la pila, y su
operación inversa, retirar (o
desapilar, pop), que retira el
último elemento apilado
COLA
• Las colas son una lista ordinal o estructura de datos
en la que el modo de acceso a sus elementos es de
tipo (FIFO) lo que quiere decir que el primer dato en
entrar es también el primer dato en salir.

• En las colas no se permite el


acceso aleatorio a ningún
elemento concreto(como ejemplo
podemos imaginar la cola de un
supermercado, la de un cine,.....),
las inserciones para las colas se
hacen al final de la lista.
Punteros
• Un puntero es una variable que referencia una región
de memoria; en otras palabras es una variable cuyo
valor es una dirección de memoria.
• La variable ' p ' de tipo puntero contiene una dirección
de memoria en la que se encuentra almacenado un
nodo de información (campo continente).
• Definición
P: puntero a nodo
Nodo: registros
dato : (es la información a almacenar)
prox: puntero a nodo
fin registro
Puntero
• Objetivo: manejar datos alojados en la zona de
memoria dinámica o heap, bien sean datos
elementales, estructuras u objetos pertenecientes a una
clase.
• La asignación dinámica de la memoria es la
asignación de almacenamiento de memoria para
utilización por parte de un programa de computador
durante el tiempo de ejecución de ese programa.

• Un objeto asignado dinámicamente permanece


asignado hasta que es desasignado explícitamente, o
por el programador
Listas lineales
• Al contrario que las pilas y las colas, las listas
lineales pueden acceder a una zona de memoria de
forma aleatoria, ya que cada trozo de información
lleva un enlace al siguiente elemento de la cadena.

• Una lista enlazada requiere una estructura de datos


compleja.
• Se clasifican de acuerdo a la cantidad de
punteros tanto externos como internos y a la
existencia o no del concepto de nulidad
Listas simplemente enlazadas
• Una lista simplemente enlazada necesita
que cada elemento contenga un enlace con
el siguiente elemento.
Puntero
Interno

Puntero
Nodo
Externo

Nil
• Procesos con listas:
–Carga apilada Concepto y algoritmo

–Carga encolada Concepto y algoritmo

–Carga ordenada Concepto y algoritmo


–Búsqueda
–Inserción/agregado de elementos
–Eliminación de elementos
Carga apilada
• La carga apilada significa que ingresaremos los
datos en la lista de manera tal que cuando los
recuperemos a través del puntero externo
(cabecera), estaremos accediendo al último
cargado. (recuperamos en forma inversa)
Accion Carga es
Prim, p: puntero a nodo;
Esto
Nodo: registro
es el
dato: { definicion del contenido}
ambiente
prox: p;
fin
Valor: {debe ser del mismo tipo que dato}
Vacia Prim
Ingresar (valor)
Prim:= nil, Carga 1er nodo
P
Mientras valor <> tope hacer ayala nil
nuevo (p)
p^. Dato := valor Carga 2do nodo
p^. Prox:= prim
perez
prim := p
P
Ingresar (valor) ayala nil
Fin mientras
Fin accion
Carga encolada
• La carga encolada significa que ingresaremos
los datos en la lista de manera tal que cuando
los recuperemos a través del puntero externo
(cabecera), estaremos accediendo al primero
cargado. (mantenemos el orden de la carga)
Accion Carga es
Prim, p, a: puntero a nodo;
Nodo: registro
dato: { definicion del contenido}
ambiente
prox: p;
fin
Valor: {debe ser del mismo tipo que dato}
Ingresar (valor), Prim:= nil,
Mientras valor <> tope hacer Vacia Prim
nuevo (p) Carga 1er nodo
p^. Dato := valor P
p^. Prox:= nil ayala nilp

Si prim = nil a
entonces prim:= p Carga 2do nodo
contrario a^. Prox:= p a
Fin si
a:= p P perez nil
Ingresar (valor)
Fin mientras a
Fin accion
Carga ordenada
• La carga ordenada implica una búsqueda de la
posición donde insertar el nuevo elemento.
Recuperaremos los datos, a través del puntero
externo (cabecera), según el orden que
hayamos establecido.
• En este proceso deberemos contemplar varias
situaciones:
– Lista vacía
– Inserción previa al 1er nodo
– Inserción posterior al último nodo
– Inserción intermedia
¿Podríamos generar
hasta aquí el trozo del
algoritmo?
Prim:= nil; A:= nil; ingresar (valor)
Nuevo (P)
P^.dato:= valor Observen que
Q:= prim hemos
Mientras (Q<> nil) y (Q^.dato< valor) hacer resumido tanto
A:= Q ; Q:= Q^.prox el 1ero como el
fin 2do caso
Si A=nil
entonces p^.prox:=Prim ; Prim:= P
contrario ……………..
Ahora consideremos los dos últimos casos

¿Tienen acciones
similares?

SI!!
Podemos
terminar el
algoritmo ?
Accion carga ordenada es Prim:= nil; A:= nil;
Ambiente ingresar (valor)
Prim, P, Q, A: puntero a nodo Mientras valor <> tope hacer
Nuevo (P)
Nodo: registro P^.dato:= valor
dato: …. Q:= prim
prox: p Mientras (Q<> nil) y (Q^.dato< valor)
fin A:= Q ; Q:= Q^.prox
Valor: (igual que dato) finmientras
Si A=nil
entonces p^.prox:=Prim ;
Prim:= P
Contrario p^.prox:= q
a^.prox:= p
Finsi
Ingresar (valor)
Fin mientras
Fin Accion
Bien, la búsqueda de un elemento en la lista , la hemos tenido que
usar cuando generalizamos el algoritmo de carga ordenada y si lo
miran de nuevo, verán que lo que estamos utilizando es…
Correcto!!, una búsqueda lineal con centinela

El proceso de eliminar un elemento es la lista tiene en forma


similar a la carga, varias situaciones.
Previamente debemos efectuar una búsqueda y de acuerdo en
donde encontremos el elemento deberemos considerar.
- Eliminar el primer elemento
- - Eliminar un elemento intermedio
- -- Eliminar el último elemento
Queda como tarea, que planteen todos los casos en forma similar a
lo hecho para la carga y generen el algoritmo resumido.

NOTA: tengan en cuenta que al eliminar, si la lista es unitaria


puedo estar dejando vacía la misma.

También podría gustarte