0% encontró este documento útil (0 votos)
3 vistas26 páginas

Estructuras de Datos: Listas y Pilas

Este documento describe diferentes tipos de listas enlazadas como listas simples, doblemente enlazadas y circulares. También explica las pilas y colas, incluyendo sus interfaces y aplicaciones.

Cargado por

MLS DR
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas26 páginas

Estructuras de Datos: Listas y Pilas

Este documento describe diferentes tipos de listas enlazadas como listas simples, doblemente enlazadas y circulares. También explica las pilas y colas, incluyendo sus interfaces y aplicaciones.

Cargado por

MLS DR
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Recordando: Lista Simple Enlazada

Pilas o Stacks

ELO320 - Estructuras de Datos y Algoritmos


Tipos de Datos Abstracts
Pilas, Listas Circulares y Colas

Dr. Nicolás Gálvez R.


[Link]@[Link]

Ing. Civil Telemática - Departamento de Electrónica

1er Semestre 2024

1/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Simple Enlazada: Inicializar

Las listas, en su versión más básica, dependen de un puntero al


inicio de la lista. Éste suele llamarse header, cabecera o inicio.
C
#i n c l u d e <s t d i o . h>

t y p e d e f s t r u c t nodo{
i n t d a t o ; // dato , puede s e r l o que u d s . n e c e s i t e n
s t r u c t nodo ∗ s g t e ; // p u n t e r o a un nodo e n a l c e .
} nodo t ;

i n t main ( i n t a r g c , c h a r ∗∗ a r g v ){

n o d o t ∗ i n i c i o = NULL ;
// I n i c i a l i z a m o s l a l i s t a , con s u p u n t e r o de i n i c i o a p u n t a n d o a NULL
// E q u i v a l e n t e a l i s t a v a c ı́ a [ ]

return 0;
}

2/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Simple Enlazada: Inicializar

3/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Enlazada PRO


Existen otras implementaciones de listas enlazadas simples, donde
se incluyen más punteros y variables de control.
C
#i n c l u d e <s t d i o . h>

t y p e d e f s t r u c t nodo{
i n t d a t o ; // dato , puede s e r l o que u d s . n e c e s i t e n
s t r u c t nodo ∗ s g t e ; // p u n t e r o a un nodo e n a l c e .
} nodo t ;

i n t main ( i n t a r g c , c h a r ∗∗ a r g v ){

n o d o t ∗ i n i c i o = NULL ; // pueden u s a r un s t r u c t p a r a e s t o s d a t o s
n o d o t ∗ f i n a l = NULL ;
int largo = 0;
// E q u i v a l e n t e a l i s t a v a c ı́ a [ ]
// ¿ Para que s i r v e e s t a n u e v a f o r m a ?
// I m p l e m e n t e l a s f u n c i o n e s de é s t a c l a s e c o n s i d e r a n d o e s t a f o r m a .

return 0;
}

4/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Enlazada PRO

5/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Doblemente Enlazada


C
#i n c l u d e <s t d i o . h>

t y p e d e f s t r u c t nodo{
i n t d a t o ; // dato , puede s e r l o que u d s . n e c e s i t e n
s t r u c t nodo ∗ s g t e ; // p u n t e r o a un nodo s i g u i e n t e , e n a l c e .
s t r u c t nodo ∗ p r e v ; // p u n t e r o a un nodo p r e v i o , e n a l c e .
} nodo t ;

i n t main ( i n t a r g c , c h a r ∗∗ a r g v ){

n o d o t ∗ i n i c i o = NULL ;
// I n i c i a l i z a m o s l a l i s t a , con s u p u n t e r o de i n i c i o a p u n t a n d o a NULL
// E q u i v a l e n t e a l i s t a v a c ı́ a [ ]

return 0;
}

6/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Doblemente Enlazada PRO


Existen otras implementaciones de listas enlazadas simples, donde
se incluyen más punteros y variables de control.
C
#i n c l u d e <s t d i o . h>

t y p e d e f s t r u c t nodo{
i n t d a t o ; // dato , puede s e r l o que u d s . n e c e s i t e n
s t r u c t nodo ∗ s g t e ; // p u n t e r o a un nodo e n a l c e .
} nodo t ;

i n t main ( i n t a r g c , c h a r ∗∗ a r g v ){

n o d o t ∗ i n i c i o = NULL ; // pueden u s a r un s t r u c t p a r a e s t o s d a t o s
n o d o t ∗ f i n a l = NULL ;
int largo = 0;
// E q u i v a l e n t e a l i s t a v a c ı́ a [ ]
// ¿ Para que s i r v e e s t a n u e v a f o r m a ?
// I m p l e m e n t e l a s f u n c i o n e s de é s t a c l a s e c o n s i d e r a n d o e s t a f o r m a .

return 0;
}

7/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Doblemente Enlazada PRO

8/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Doblemente Enlazada PRO+


Existen otras implementaciones de listas enlazadas simples, donde
se incluyen más punteros y variables de control.
C
#i n c l u d e <s t d i o . h>

t y p e d e f s t r u c t nodo{
i n t d a t o ; // dato , puede s e r l o que u d s . n e c e s i t e n
s t r u c t nodo ∗ s g t e ; // p u n t e r o a un nodo e n a l c e .
} nodo t ;

i n t main ( i n t a r g c , c h a r ∗∗ a r g v ){

n o d o t ∗ i n i c i o = NULL ; // pueden u s a r un s t r u c t p a r a e s t o s d a t o s
n o d o t ∗ f i n a l = NULL ;
n o d o t ∗ a c t u a l = NULL ;
int largo = 0;
int pos actual = 0;
// E q u i v a l e n t e a l i s t a v a c ı́ a [ ]
// ¿ Para que s i r v e e s t a n u e v a f o r m a ?
// I m p l e m e n t e l a s f u n c i o n e s de é s t a c l a s e c o n s i d e r a n d o e s t a f o r m a .

return 0;
}

9/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Lista Doblemente Enlazada PRO+

10/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Pilas o Stacks
TDA que permite operar solo en uno de sus extremos. Es de tipo LIFO:
Last In, First Out. Puede ser implementada con arreglos o listas.

Aplicaciones:
Control+Z/Control+Y: Operaciones de Desahcer o Rehacer
(undo/redo).
Compilación: Formulas matemáticas en notacion de primer orden,
i.e. (x 1 (+ 2 3)) = x 1 + 2 3
Busqueda en árboles: Búsqueda en Profundidad (DFS).
11/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Pilas o Stacks: Interfaz

push(): Ingresa un nuevo elemento en la pila.


pop(): Elimina el elemento superior de la pila.
peak(): Devuelve el valor del primer elemento en la pila.
is empty(): Revisa si la pila está vacı́a.
is full(): Revisa si la pila está llena (solo para tamños fijos).
¿Cómo se implementan?
12/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Pilas o Stacks

13/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Pilas o Stacks: push()

14/26
Recordando: Lista Simple Enlazada
Pilas o Stacks

Pilas o Stacks: pop()

15/26
Listas Circulares
Colas o Queues.

Listas Circulares

La lista circular es una variación de la lista simple/doble enlazada


en la cual, el primer elemento está conectado con el último
elemento, creando ası́ una estructura circular.

16/26
Listas Circulares
Colas o Queues.

Listas Circulares

Ventajas:
Cualquier nodo puede ser la cabezera o final.
Si una estructura tiene dos punteros, ahora solo es necesario
uno.
Útil para lecturas reiterativas de elementos.
Aplicaciones:
Colas o Queues.
Buffers circulares dinámicos y estáticos.
Planificacion de ejecución de componentes de CPU.
Todo tipo de round robin scheduling.

17/26
Listas Circulares
Colas o Queues.

Colas o Queues
TDA que permite operar en un extremo para entrada y en otro extremo
para salida. Simula el comportamiento de una fila o cola. Es de tipo
FIFO: First In, First Out. Puede ser implementada con arreglos o listas.

Aplicaciones:
Planificación de recursos. Priorización.
Colas de impresión.
Comunicación asincrónica e interrupciones de sistema.
Teorı́a de Colas.
18/26
Listas Circulares
Colas o Queues.

Pilas o Stacks: Interfaz

enqueue(): Ingresa un nuevo elemento al final de la cola.


dequeue(): Elimina el primer elemento de la cola.
size(): Devuelve el tamaño de la queue.
check(): Devuelve el valor de un elemento de la cola.
is empty(): Revisa si la queue está vacı́a.
is full(): Revisa si la queue está llena (solo para tamños
fijos).
¿Cómo se implementan?
19/26
Listas Circulares
Colas o Queues.

Colas o Queues

20/26
Listas Circulares
Colas o Queues.

Colas o Queues: enqueue()

21/26
Listas Circulares
Colas o Queues.

Colas o Queues: dequeue()

22/26
Listas Circulares
Colas o Queues.

Colas o Queues Circulares

Es una fila o cola que se implementa utilizando estructuras de


datos circulares, i.e., listas enlazadas circulares.
Ventaja principal, necesita sólo puntero para ser manejada, en la
posición final. No hay necesidad de recorrer toda la fila para poder
hacer cambios.

23/26
Listas Circulares
Colas o Queues.

Colas o Queues: enqueue()

24/26
Listas Circulares
Colas o Queues.

Colas o Queues: dequeue()

25/26
Listas Circulares
Colas o Queues.

Desafı́o

Desarrolle un programa que:


Invierta una palabra utilizando pilas.
Inveirta una palabra usando queues.
Invierta una lista utilizando stacks.
Invierta una lista utilizando colas.

26/26

También podría gustarte