SlideShare una empresa de Scribd logo
1 de 31
LISTAS
Una lista es una estructura de datos homogénea y dinámica,
que va a estar formada por una secuencia de elementos,
donde cada uno de ellos va seguido de otro o de ninguno.
OPERACIONES BASICAS CON
LISTAS
INSERTAR. La operación insertar consiste en la introducción de un nuevo
elemento en la lista.
En una lista no ordenada no es necesario mantener ningún orden, por lo
tanto la inserción de elementos se puede realizar en cualquier lugar de la
lista, al principio, al final, en una posición aleatoria.
La operación más sencilla depende de la implementación de la estructura
de datos, en unos casos puede ser la inserción al inicio, en otros la inserción
al final y en este caso la inserción la realiza en el segundo nodo de la lista.
Si tenemos la lista...

Si insertamos el elemento 0, la lista quedaría de la siguiente forma:
BORRAR. La operación borrar consiste en la eliminación de la lista de un
elemento concreto.
La eliminación en una lista no conlleva ningún trabajo adicional más
que el propio de la eliminación del elemento en sí. Para borrar un
elemento cualquiera habría que realizar un recorrido secuencial de la
lista hasta encontrar el nodo buscado y una vez localizado reestructurar
los punteros para saltarse el nodo a borrar y así poder eliminarlo.

Paso 1: Localizar el elemento a borrar.

Paso 2: Reestructurar punteros y eliminar nodo.
TIPOS DE LISTAS
Listas enlazadas lineales
Listas simples enlazadas
La lista enlazada básica es la lista enlazada simple tiene un
enlace por nodo. Este enlace apunta al siguiente nodo en
la lista, o al valor NULL o a la lista vacía, si es el último nodo.
Una lista enlazada simple contiene dos valores:
• El valor actual del nodo
• Un enlace al siguiente nodo
Lista Doblemente Enlazada
Un tipo de lista enlazada más sofisticado es la lista
doblemente enlazada o lista enlazadas de dos vías. Cada
nodo tiene dos enlaces:
• Uno apunta al nodo anterior, o apunta al valor NULL si
es el primer nodo
• Otro que apunta al nodo siguiente, o apunta al
valor NULL si es el último nodo.
Listas enlazadas circulares
En una lista enlazada circular, el primer y el último nodo están unidos
juntos. Para recorrer una lista enlazada circular podemos empezar por
cualquier nodo y seguir la lista en cualquier dirección hasta que se
regrese hasta el nodo original, listas enlazadas circulares pueden ser
vistas como listas sin comienzo ni fin. Este tipo de listas es el más usado
para dirigir buffers para “ingerir” datos, y para visitar todos los nodos de
una lista a partir de uno dado.
Listas enlazadas circulares simples
Cada nodo tiene un enlace, similar al de las listas enlazadas simples,
excepto que el siguiente nodo del último apunta al primero, esto nos
permite rápidas inserciones al principio, y también permite accesos al
primer nodo desde el puntero del último nodo. 1
LISTAS SIMPLEMENTE
ENLAZADAS
La lista enlazada es un TDA que nos permite almacenar datos de una forma
organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es
dinámica, por lo que no tenemos que saber los elementos que puede contener.
En una lista enlazada, cada elemento apunta al siguiente excepto el último que
no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros
que contienen el dato a almacenar y un enlace al siguiente elemento. Los
elementos de una lista, suelen recibir también el nombre de nodos de la lista.
struct lista {
int dato;
lista *siguiente;
};
Para que esta estructura sea un TDA lista enlazada, debe tener unos
operadores asociados que permitan la manipulación de los datos que
contiene. Los operadores básicos de una lista enlazada son:
•Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta
inserción al principio o final de la lista o bien en orden.
•Eliminar: elimina un nodo de la lista, puede ser según la posición o por el
dato.
•Buscar: busca un elemento en la lista.
•Localizar: obtiene la posición del nodo en la lista.
•Vaciar: borra todos los elementos de la lista
LISTAS DOBLEMENTE
ENLAZADAS
Son listas que tienen un enlace con el elemento siguiente y con el
anterior.
Ventaja;
 Pueden recorrerse en ambos sentidos para efectuar una operación
con cada elemento o para insertar/actualizar y borrar.
 Las búsquedas son algo más rápidas puesto que no hace falta hacer
referencia al elemento anterior.
Desventaja;
 Su inconveniente es que ocupan más memoria por nodo que una lista
simple.
struct lista_doble {
gint dato;
lista_doble *siguiente;
lista_doble *anterior;

Declaración del tipo lista
doblemente enlazada

};
I.

Representa el dato a almacenar, que puede ser de
cualquier tipo. En este ejemplo se trataría de una lista de
enteros.
II. Se trata de un puntero al siguiente elemento de la lista.
Con este puntero se enlaza con el sucesor, de forma que
podamos construir la lista.
III. Es un puntero al elemento anterior de la lista. Este puntero
enlaza con el elemento predecesor de la lista y permite
recorrerla en sentido inverso.
I.

Representa el dato que se va a almacenar. Se utiliza un puntero
genérico por lo que puede almacenar un puntero a cualquier
tipo de dato o bien almacenar un entero utilizando las macros
de conversión de tipos.
II. Se trata de un puntero al siguiente elemento de la lista.
III. Se trata de un puntero al elemento anterior de la lista.

Declaración de
la estructura
GList
struct GList {
gpointer data;
GList *next;
GList *prev;
};
LISTAS CIRCULARES
Las listas circulares tienen la característica de que el último
elemento de la misma apunta al primero
La siguiente figura es una representación gráfica de una lista
circular.
En las listas circulares se pueden realizar las mismas operaciones
que
en
las
listas
simplemente
ligadas,
como
son:






Insertar elemento en una lista
Insertar elemento único
Insertar ordenadamente
Eliminar elemento
Buscar elemento
public class ListaCircular {
private NodoCircular inicio;
// constructor de listaCircular
public ListaCircular(){
inicio= null ;
}

}

Declaración de una
lista circular
APLICACIONES
Mediante este mecanismo, podemos construir muchas estructuras de
datos enlazadas con listas; esta práctica tiene su origen en el
lenguaje de programación Lisp, donde las listas enlazadas son una
estructura de datos primaria (aunque no la única), y ahora es una
característica común en el estilo de programación funcional.
A veces, las listas enlazadas son usadas para implementar arrays
asociativos, y estas en el contexto de las llamadas listas asociativas.
Hay pocas ventajas en este uso de las listas enlazadas; hay mejores
formas de implementar éstas estructuras, por ejemplo con árboles
binarios de búsqueda equilibrados.
PILAS
Pilas
Estructura de datos lineal donde los elementos pueden
ser añadidos o removidos solo por un extremo.
Esta estructura tiene una filosofia LIFO (last-in, first-out),
ultimo en entrar, primero en salir
Ejemplos:
•Pila de platos.
•Pila de monedas.
•Pila de discos.
 Una pila (stack en inglés) es una lista ordenada 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. Esta estructura
se aplica en multitud de ocasiones en el área de informática debido a su simplicidad
y ordenación implícita de la propia estructura.
 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.
 En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al
último objeto apilado (denominado TOS, Top of Stack en inglés). La
operación retirar permite la obtención de este elemento, que es retirado de la pila
permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el
nuevo TOS.
Representación básica en
memoria estática y dinámica


Arreglos (memoria estática)

Una vez definido el tamaño del
arreglo no se cambia su tamaño

Max = 5
tope

c
b
a

pila


Listas enlazadas (memoria
dinámica)

tope

Se almacenan los elementos como
nodos y el tamaño se ajusta
exactamente a los elementos de
la pila

c

b
pila

d

a
Operaciones básicas con pilas.
PUSH (insertar).- Agrega un elementos a la pila en el
extremo llamado tope.
-POP (remover).- Remueve el elemento de la pila que se
encuentra en el extremo llamado tope.
-VACIA.- Indica si la pila contiene o no contiene elementos.
-LLENA.- Indica si es posible o no agregar nuevos elementos
a la pila.
Ejemplo:

Insertar
Inicio:

Insertar

Insertar

A:

B:

Eliminar

C:

C
B
A
Tope
tope

Null

Tope
tope

B

B

A

A

A

Tope
tope

Tope

Tope
tope

tope
Métodos básicos para
implementar la pila son:
 Pila_llena()
Devuelve verdadero si la pila esta llena
 Pila_vacia();
Devuelve verdadero si la pila esta vacia
 Insertar_push (int elem);
Agrega el elemento a la pila
 Retirar_pop();
Elimina el elemento que esta en la cima de la pila
Notaciones
NOTACION INFIJA:
es la forma habitual de escribir operaciones
aritméticas es la de situar el operador entre sus dos
operandos. El operador se evalúa dentro de los
Operandos.
Los operadores aparecen en medio de los operandos.
A + B, A – 1, E/F, A * C , A + B + C
NOTACION PREFIJA: (polaca)
El operador aparece antes de los operandos.
+ AB, - A1, /EF, *AC, ++ABC, +- ABC
NOTACION POSTFIJA: (polaca)
El operador aparece al final de los operandos.
AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-
Reglas para convertir de infija a
posfija o prefija
 La ventaja de utilizar expresiones en notación
polaca (posfija o prefija) radica en que no son
necesarios los paréntesis para indicar el orden de
operación, ya que esto queda establecido por la
ubicación de los operadores de más alta
prioridad se ejecuta primero.
 Si hubiera en una expresión 2 o mas operadores
de igual precedencia, se procesa de izquierda a
derecha.
 Las expresiones con paréntesis se ejecutan
primero
De infija a prefija
A*B/(A+C) (infija) ->

A*B/+AC

->

*AB/+AC

->

/*AB+AC (prefija)

A*B/A+C

->

*AB/A+C

->

/*ABA+C

-> +/*ABAC

(A-B)ˆC+D

->

-ABˆC+D ->

ˆ-ABC+D

-> +ˆ-ABCD

De infija a postfija
A*B/(A+C) (infija) ->

A*B/AC+

-> AB*/AC+

->

AB*AC+/

A*B/A+C

->

AB*/A+C

->

AB*A/+C

-> AB*A/C+

(A-B)ˆC+D

->

AB-ˆC+D ->

AB-Cˆ+D

-> AB-CˆD+

(postfija)
COLAS
Colas
Es una lista lineal de elementos en la
que las operaciones de insertar y
eliminar se realizan en diferentes
extremos de la cola.

Trabajan con filosofía FIFO ( First In - First
out), el primer elemento en entrar es el
primer elemento en salir.
Tipos de Colas
Cola simple: Estructura lineal donde los
elementos salen en el mismo orden en que
llegan.

Cola circular: Representación lógica de una
cola simple en un arreglo.
Cola Doble: Estructura lineal en la que los
elementos se pueden añadir o quitar por
cualquier extremo de la cola (cola
bidireccional).
Operaciones básicas con colas
Insertar.- Almacena al final de la cola el elemento
que se recibe como parámetro.
Eliminar.- Saca de la cola el elemento que se
encuentra al frente.
Vacía.- Regresa un valor booleano indicando si la
cola tiene o no elementos (true – si la cola esta
vacía, false – si la cola tiene al menos un
elemento).
Llena.- Regresa un valor booleano indicando si la
cola tiene espacio disponible para insertar nuevos
elementos ( true – si esta llena y false si existen
espacios disponibles).
Representación usando arreglos
Las colas pueden ser representadas en
arreglos de una dimensión (vector)
manteniendo dos variables que indiquen el
FRENTE y FINAL de los elementos de la cola.
0

1

2

3

4

A

F

S

D

Z

Frente

Final

5
Cuando la cola esta vacía las
variables frente y final son nulos y
no es posible remover elementos.
Cuando la cola esta llena ( frente
= 0 y final = n-1) no es posible
insertar elementos nuevos a la
cola.
Cola Circular
 Es una representación
lógica de la cola en un
arreglo.
 El frente y final son
movibles.

 Cuando el frente o
final llegan al extremo
se regresan a la
primera posición del
arreglo.

Frente
Cola
inicial

Final

B C D
Frente Final

Remover

C D
Frente

Final

Insertar E
C D
Final

E

Frente

Insertar F
F

C D

E

Más contenido relacionado

La actualidad más candente

Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colasknowallrpa
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesJosé Antonio Sandoval Acosta
 
Eliminar elementos de una cola
Eliminar elementos de una colaEliminar elementos de una cola
Eliminar elementos de una colajeffersoncenteno
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pilajefer
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: ListaEmerson Garay
 
Métodos de ordenación externa
Métodos de ordenación externaMétodos de ordenación externa
Métodos de ordenación externaEdwin Narváez
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)José Antonio Sandoval Acosta
 
Listas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas CircularesListas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas CircularesMago Julio Cesar
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discretaJunior Soto
 

La actualidad más candente (20)

Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Estructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras LinealesEstructura de Datos -Unidad III: Estructuras Lineales
Estructura de Datos -Unidad III: Estructuras Lineales
 
Eliminar elementos de una cola
Eliminar elementos de una colaEliminar elementos de una cola
Eliminar elementos de una cola
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Metodo de busqueda
Metodo de busquedaMetodo de busqueda
Metodo de busqueda
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: Lista
 
Estructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no linealesEstructura de Datos - Estructuras no lineales
Estructura de Datos - Estructuras no lineales
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
COLAS
COLASCOLAS
COLAS
 
Métodos de ordenación externa
Métodos de ordenación externaMétodos de ordenación externa
Métodos de ordenación externa
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
 
Listas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas CircularesListas Doblemente Enlazadas y Listas Circulares
Listas Doblemente Enlazadas y Listas Circulares
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Arboles mate discreta
Arboles mate discretaArboles mate discreta
Arboles mate discreta
 

Destacado

Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gonsepulvedas
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De CompiladorBigbossH
 
Cap4
Cap4Cap4
Cap4CJAO
 

Destacado (6)

Manejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50gManejo y programación de la calculadora hp50g
Manejo y programación de la calculadora hp50g
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Etapas de compilacion
Etapas de compilacionEtapas de compilacion
Etapas de compilacion
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De Compilador
 
Cap4
Cap4Cap4
Cap4
 

Similar a Estructuras lineales

Similar a Estructuras lineales (20)

Listas de Java
Listas de JavaListas de Java
Listas de Java
 
Unidad tres estructura de datos
Unidad tres estructura de datosUnidad tres estructura de datos
Unidad tres estructura de datos
 
Listas
ListasListas
Listas
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Lissette pimentel 11 1149 --- listas, pilas y colas
Lissette pimentel 11 1149 --- listas, pilas y colasLissette pimentel 11 1149 --- listas, pilas y colas
Lissette pimentel 11 1149 --- listas, pilas y colas
 
listas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdflistas Luis Guarata 31332901.pdf
listas Luis Guarata 31332901.pdf
 
Estructura de dato unidad 3
Estructura de dato unidad 3Estructura de dato unidad 3
Estructura de dato unidad 3
 
Listas pilas colas_carlos_rosario10-1337
Listas pilas colas_carlos_rosario10-1337Listas pilas colas_carlos_rosario10-1337
Listas pilas colas_carlos_rosario10-1337
 
Teoria de listas
Teoria de listasTeoria de listas
Teoria de listas
 
Listas c#
Listas c#Listas c#
Listas c#
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Listas en C#
Listas en C#Listas en C#
Listas en C#
 
Darwin rodriguez 12-0861_pilasy_colas
Darwin rodriguez 12-0861_pilasy_colasDarwin rodriguez 12-0861_pilasy_colas
Darwin rodriguez 12-0861_pilasy_colas
 
Tda y heaps
Tda y heapsTda y heaps
Tda y heaps
 
Gilmora
GilmoraGilmora
Gilmora
 
Listas encadenadas
Listas encadenadas Listas encadenadas
Listas encadenadas
 
Listas,pilas&colas yorka
Listas,pilas&colas yorkaListas,pilas&colas yorka
Listas,pilas&colas yorka
 
Diapositiva de l estructura de datos
Diapositiva de l estructura de datosDiapositiva de l estructura de datos
Diapositiva de l estructura de datos
 

Estructuras lineales

  • 1.
  • 2. LISTAS Una lista es una estructura de datos homogénea y dinámica, que va a estar formada por una secuencia de elementos, donde cada uno de ellos va seguido de otro o de ninguno.
  • 3. OPERACIONES BASICAS CON LISTAS INSERTAR. La operación insertar consiste en la introducción de un nuevo elemento en la lista. En una lista no ordenada no es necesario mantener ningún orden, por lo tanto la inserción de elementos se puede realizar en cualquier lugar de la lista, al principio, al final, en una posición aleatoria. La operación más sencilla depende de la implementación de la estructura de datos, en unos casos puede ser la inserción al inicio, en otros la inserción al final y en este caso la inserción la realiza en el segundo nodo de la lista. Si tenemos la lista... Si insertamos el elemento 0, la lista quedaría de la siguiente forma:
  • 4. BORRAR. La operación borrar consiste en la eliminación de la lista de un elemento concreto. La eliminación en una lista no conlleva ningún trabajo adicional más que el propio de la eliminación del elemento en sí. Para borrar un elemento cualquiera habría que realizar un recorrido secuencial de la lista hasta encontrar el nodo buscado y una vez localizado reestructurar los punteros para saltarse el nodo a borrar y así poder eliminarlo. Paso 1: Localizar el elemento a borrar. Paso 2: Reestructurar punteros y eliminar nodo.
  • 5. TIPOS DE LISTAS Listas enlazadas lineales Listas simples enlazadas La lista enlazada básica es la lista enlazada simple tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si es el último nodo. Una lista enlazada simple contiene dos valores: • El valor actual del nodo • Un enlace al siguiente nodo Lista Doblemente Enlazada Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene dos enlaces: • Uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo • Otro que apunta al nodo siguiente, o apunta al valor NULL si es el último nodo.
  • 6. Listas enlazadas circulares En una lista enlazada circular, el primer y el último nodo están unidos juntos. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier dirección hasta que se regrese hasta el nodo original, listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos los nodos de una lista a partir de uno dado. Listas enlazadas circulares simples Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del último apunta al primero, esto nos permite rápidas inserciones al principio, y también permite accesos al primer nodo desde el puntero del último nodo. 1
  • 7. LISTAS SIMPLEMENTE ENLAZADAS La lista enlazada es un TDA que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinámica, por lo que no tenemos que saber los elementos que puede contener. En una lista enlazada, cada elemento apunta al siguiente excepto el último que no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos de una lista, suelen recibir también el nombre de nodos de la lista.
  • 8. struct lista { int dato; lista *siguiente; }; Para que esta estructura sea un TDA lista enlazada, debe tener unos operadores asociados que permitan la manipulación de los datos que contiene. Los operadores básicos de una lista enlazada son: •Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta inserción al principio o final de la lista o bien en orden. •Eliminar: elimina un nodo de la lista, puede ser según la posición o por el dato. •Buscar: busca un elemento en la lista. •Localizar: obtiene la posición del nodo en la lista. •Vaciar: borra todos los elementos de la lista
  • 9. LISTAS DOBLEMENTE ENLAZADAS Son listas que tienen un enlace con el elemento siguiente y con el anterior. Ventaja;  Pueden recorrerse en ambos sentidos para efectuar una operación con cada elemento o para insertar/actualizar y borrar.  Las búsquedas son algo más rápidas puesto que no hace falta hacer referencia al elemento anterior. Desventaja;  Su inconveniente es que ocupan más memoria por nodo que una lista simple.
  • 10. struct lista_doble { gint dato; lista_doble *siguiente; lista_doble *anterior; Declaración del tipo lista doblemente enlazada }; I. Representa el dato a almacenar, que puede ser de cualquier tipo. En este ejemplo se trataría de una lista de enteros. II. Se trata de un puntero al siguiente elemento de la lista. Con este puntero se enlaza con el sucesor, de forma que podamos construir la lista. III. Es un puntero al elemento anterior de la lista. Este puntero enlaza con el elemento predecesor de la lista y permite recorrerla en sentido inverso.
  • 11. I. Representa el dato que se va a almacenar. Se utiliza un puntero genérico por lo que puede almacenar un puntero a cualquier tipo de dato o bien almacenar un entero utilizando las macros de conversión de tipos. II. Se trata de un puntero al siguiente elemento de la lista. III. Se trata de un puntero al elemento anterior de la lista. Declaración de la estructura GList struct GList { gpointer data; GList *next; GList *prev; };
  • 12. LISTAS CIRCULARES Las listas circulares tienen la característica de que el último elemento de la misma apunta al primero La siguiente figura es una representación gráfica de una lista circular. En las listas circulares se pueden realizar las mismas operaciones que en las listas simplemente ligadas, como son:      Insertar elemento en una lista Insertar elemento único Insertar ordenadamente Eliminar elemento Buscar elemento
  • 13. public class ListaCircular { private NodoCircular inicio; // constructor de listaCircular public ListaCircular(){ inicio= null ; } } Declaración de una lista circular
  • 14. APLICACIONES Mediante este mecanismo, podemos construir muchas estructuras de datos enlazadas con listas; esta práctica tiene su origen en el lenguaje de programación Lisp, donde las listas enlazadas son una estructura de datos primaria (aunque no la única), y ahora es una característica común en el estilo de programación funcional. A veces, las listas enlazadas son usadas para implementar arrays asociativos, y estas en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este uso de las listas enlazadas; hay mejores formas de implementar éstas estructuras, por ejemplo con árboles binarios de búsqueda equilibrados.
  • 15. PILAS
  • 16. Pilas Estructura de datos lineal donde los elementos pueden ser añadidos o removidos solo por un extremo. Esta estructura tiene una filosofia LIFO (last-in, first-out), ultimo en entrar, primero en salir Ejemplos: •Pila de platos. •Pila de monedas. •Pila de discos.
  • 17.  Una pila (stack en inglés) es una lista ordenada 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. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura.  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.  En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS.
  • 18. Representación básica en memoria estática y dinámica  Arreglos (memoria estática) Una vez definido el tamaño del arreglo no se cambia su tamaño Max = 5 tope c b a pila  Listas enlazadas (memoria dinámica) tope Se almacenan los elementos como nodos y el tamaño se ajusta exactamente a los elementos de la pila c b pila d a
  • 19. Operaciones básicas con pilas. PUSH (insertar).- Agrega un elementos a la pila en el extremo llamado tope. -POP (remover).- Remueve el elemento de la pila que se encuentra en el extremo llamado tope. -VACIA.- Indica si la pila contiene o no contiene elementos. -LLENA.- Indica si es posible o no agregar nuevos elementos a la pila.
  • 21. Métodos básicos para implementar la pila son:  Pila_llena() Devuelve verdadero si la pila esta llena  Pila_vacia(); Devuelve verdadero si la pila esta vacia  Insertar_push (int elem); Agrega el elemento a la pila  Retirar_pop(); Elimina el elemento que esta en la cima de la pila
  • 22. Notaciones NOTACION INFIJA: es la forma habitual de escribir operaciones aritméticas es la de situar el operador entre sus dos operandos. El operador se evalúa dentro de los Operandos. Los operadores aparecen en medio de los operandos. A + B, A – 1, E/F, A * C , A + B + C NOTACION PREFIJA: (polaca) El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ++ABC, +- ABC NOTACION POSTFIJA: (polaca) El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-
  • 23. Reglas para convertir de infija a posfija o prefija  La ventaja de utilizar expresiones en notación polaca (posfija o prefija) radica en que no son necesarios los paréntesis para indicar el orden de operación, ya que esto queda establecido por la ubicación de los operadores de más alta prioridad se ejecuta primero.  Si hubiera en una expresión 2 o mas operadores de igual precedencia, se procesa de izquierda a derecha.  Las expresiones con paréntesis se ejecutan primero
  • 24. De infija a prefija A*B/(A+C) (infija) -> A*B/+AC -> *AB/+AC -> /*AB+AC (prefija) A*B/A+C -> *AB/A+C -> /*ABA+C -> +/*ABAC (A-B)ˆC+D -> -ABˆC+D -> ˆ-ABC+D -> +ˆ-ABCD De infija a postfija A*B/(A+C) (infija) -> A*B/AC+ -> AB*/AC+ -> AB*AC+/ A*B/A+C -> AB*/A+C -> AB*A/+C -> AB*A/C+ (A-B)ˆC+D -> AB-ˆC+D -> AB-Cˆ+D -> AB-CˆD+ (postfija)
  • 25. COLAS
  • 26. Colas Es una lista lineal de elementos en la que las operaciones de insertar y eliminar se realizan en diferentes extremos de la cola. Trabajan con filosofía FIFO ( First In - First out), el primer elemento en entrar es el primer elemento en salir.
  • 27. Tipos de Colas Cola simple: Estructura lineal donde los elementos salen en el mismo orden en que llegan. Cola circular: Representación lógica de una cola simple en un arreglo. Cola Doble: Estructura lineal en la que los elementos se pueden añadir o quitar por cualquier extremo de la cola (cola bidireccional).
  • 28. Operaciones básicas con colas Insertar.- Almacena al final de la cola el elemento que se recibe como parámetro. Eliminar.- Saca de la cola el elemento que se encuentra al frente. Vacía.- Regresa un valor booleano indicando si la cola tiene o no elementos (true – si la cola esta vacía, false – si la cola tiene al menos un elemento). Llena.- Regresa un valor booleano indicando si la cola tiene espacio disponible para insertar nuevos elementos ( true – si esta llena y false si existen espacios disponibles).
  • 29. Representación usando arreglos Las colas pueden ser representadas en arreglos de una dimensión (vector) manteniendo dos variables que indiquen el FRENTE y FINAL de los elementos de la cola. 0 1 2 3 4 A F S D Z Frente Final 5
  • 30. Cuando la cola esta vacía las variables frente y final son nulos y no es posible remover elementos. Cuando la cola esta llena ( frente = 0 y final = n-1) no es posible insertar elementos nuevos a la cola.
  • 31. Cola Circular  Es una representación lógica de la cola en un arreglo.  El frente y final son movibles.  Cuando el frente o final llegan al extremo se regresan a la primera posición del arreglo. Frente Cola inicial Final B C D Frente Final Remover C D Frente Final Insertar E C D Final E Frente Insertar F F C D E