SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Pilas
Colas
Listas
Estructuras de datos: Pilas, Colas, Listas
Algoritmos
Dep. de Computaci´on - Fac. de Inform´atica
Universidad de A Coru˜na
J. Santiago Jorge
sjorge@udc.es
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
´Indice
1 Pilas
2 Colas
3 Listas
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Referencias bibliogr´aficas
M. A. Weiss. Listas, pilas y colas. En Estructuras de datos y
algoritmos, cap´ıtulo 3, p´aginas 45–92. Addison-Wesley
Iberoamericana, 1995.
R. Pe˜na Mar´ı. Implementaci´on de estructuras de datos. En
Dise˜no de Programas. Formalismo y abstracci´on, cap´ıtulo 7,
p´aginas 257–290. Prentice Hall, segunda edici´on, 1998.
G. Brassard y T. Bratley. Estructura de datos. En Fundamentos
de algoritmia, cap´ıtulo 5, p´aginas 167–210. Prentice Hall, 1997.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
´Indice
1 Pilas
2 Colas
3 Listas
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pilas
Acceso limitado al ´ultimo elemento insertado
Operaciones b´asicas: apilar, desapilar y cima.
desapilar o cima en una pila vac´ıa es un error en el TDA pila.
Quedarse sin espacio al apilar es un error de implementaci´on.
Cada operaci´on deber´ıa tardar una cantidad constante de tiempo
en ejecutarse.
Con independencia del n´umero de elementos apiladas.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on a base de vectores (i)
tipo Pila = registro
Cima_de_pila : 0..Tama˜no_m´aximo_de_pila
Vector_de_pila : vector [1..Tama˜no_m´aximo_de_pila]
de Tipo_de_elemento
fin registro
procedimiento Crear Pila ( P )
P.Cima_de_pila := 0
fin procedimiento
funci´on Pila Vac´ıa ( P ) : test
devolver P.Cima_de_pila = 0
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on a base de vectores (ii)
procedimiento Apilar ( x, P )
si P.Cima_de_pila = Tama˜no_m´aximo_de_pila entonces
error Pila llena
sino
P.Cima_de_pila := P.Cima_de_pila + 1;
P.Vector_de_pila[P.Cima_de_pila] := x
fin procedimiento
funci´on Cima ( P ) : Tipo_de_elemento
si Pila Vac´ıa (P) entonces error Pila vac´ıa
sino devolver P.Vector_de_pila[P.Cima de Pila]
fin funci´on
procedimiento Desapilar ( P )
si Pila Vac´ıa (P) entonces error Pila vac´ıa
sino P.Cima_de_pila := P.Cima_de_pila - 1
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: pilas.h
#ifndef TAMANO_MAXIMO_PILA
#define TAMANO_MAXIMO_PILA 10
#endif
typedef int tipo_elemento;
typedef struct {
int cima;
tipo_elemento vector[TAMANO_MAXIMO_PILA];
} pila;
void crear_pila(pila *);
int pila_vacia(pila);
void apilar(tipo_elemento, pila *);
tipo_elemento cima(pila);
void desapilar(pila *);
/* ERRORES: cima o desapilar sobre la pila vac´ıa
apilar sobre la pila llena */
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: pilas.c (i)
#include <stdlib.h>
#include <stdio.h>
#include "pilas.h"
void crear_pila(pila *p) {
p->cima = -1;
}
int pila_vacia(pila p) {
return (p.cima == -1);
}
void apilar(tipo_elemento x, pila *p) {
if (++p->cima == TAMANO_MAXIMO_PILA) {
printf("error: pila llenan"); exit(EXIT_FAILURE);
}
p->vector[p->cima] = x;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: pilas.c (ii)
tipo_elemento cima(pila p) {
if (pila_vacia(p)) {
printf("error: pila vacian");
exit(EXIT_FAILURE);
}
return p.vector[p.cima];
}
void desapilar(pila *p) {
if (pila_vacia(*p)) {
printf("error: pila vacian");
exit(EXIT_FAILURE);
}
p->cima--;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
´Indice
1 Pilas
2 Colas
3 Listas
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Colas
Operaciones b´asicas: insertar, quitarPrimero y primero.
Cada rutina deber´ıa ejecutarse en tiempo constante.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
final
2) Insertar en Cola (a,C) a
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
La implementaci´on circular devuelve cabeza y fin al principo del
vector cuando rebasan la ´ultima posici´on.
final
1) Crear Cola (C)
cabeza
final
2) Insertar en Cola (a,C) a
cabeza
final
3) Insertar en Cola (b,C) a b
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
final
6) Quitar Primero (C) b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on circular a base de vectores (i)
final
4) Insertar en Cola (c,C) a b c
cabeza
final
5) Insertar en Cola (d,C) a b c d
cabeza
final
6) Quitar Primero (C) b c d
cabeza
final
7) Insertar en Cola (e,C) e b c d
cabeza
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo (i)
tipo Cola = registro
Cabeza_de_cola, Final_de_cola: 1..Tama˜no_m´aximo_de_cola
Tama˜no_de_cola : 0..Tama˜no_m´aximo_de_cola
Vector_de_cola : vector [1..Tama˜no_m´aximo_de_cola]
de Tipo_de_elemento
fin registro
procedimiento Crear_Cola ( C )
C.Tama˜no_de_cola := 0;
C.Cabeza_de_cola := 1;
C.Final_de_cola := Tama˜no_m´aximo_de_cola
fin procedimiento
funci´on Cola_Vac´ıa ( C ) : test
devolver C.Tama˜no_de_cola = 0
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo (ii)
procedimiento incrementar ( x ) (* privado *)
si x = Tama˜no_m´aximo_de_cola entonces x := 1
sino x := x + 1
fin procedimiento
procedimiento Insertar_en_Cola ( x, C )
si C.Tama˜no_de_Cola = Tama˜no_m´aximo_de_cola entonces
error Cola llena
sino
C.Tama˜no_de_cola := C.Tama˜no_de_cola + 1;
incrementar(C.Final_de_cola);
C.Vector_de_cola[C.Final_de_cola] := x;
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo (iii)
funci´on Quitar_Primero ( C ) : Tipo_de_elemento
si Cola_Vac´ıa ( C ) entonces
error Cola vac´ıa
sino
C.Tama˜no_de_cola := C.Tama˜no_de_cola - 1;
x := C.Vector_de_cola[C.Cabeza_de_cola];
incrementar(C.Cabeza_de_cola);
devolver x
fin funci´on
funci´on Primero ( C ) : Tipo_de_elemento
si Cola_Vac´ıa ( C ) entonces
error Cola vac´ıa
sino
devolver C.Vector_de_cola[C.Cabeza_de_cola]
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: colas.h
#ifndef TAMANO_MAXIMO_COLA
#define TAMANO_MAXIMO_COLA 5
#endif
typedef int tipo_elemento;
typedef struct {
int cabeza, final, tamano;
tipo_elemento vector[TAMANO_MAXIMO_COLA];
} cola;
void crear_cola(cola *);
int cola_vacia(cola);
void insertar(tipo_elemento, cola *);
tipo_elemento quitar_primero(cola *);
tipo_elemento primero(cola);
/* ERRORES: quitar_primero o primero sobre una cola vac´ıa
insertar en una cola llena */
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: colas.c (i)
#include <stdlib.h>
#include <stdio.h>
#include "colas.h"
void crear_cola(cola *c) {
c->tamano = 0;
c->cabeza = 0;
c->final = -1;
}
int cola_vacia(cola c) {
return (c.tamano == 0);
}
void incrementar(int *x) { /* privado */
if (++(*x) == TAMANO_MAXIMO_COLA)
*x = 0;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: colas.c (ii)
void insertar(tipo_elemento x, cola *c) {
if (c->tamano == TAMANO_MAXIMO_COLA) {
printf("error: cola llena: %dn", c->tamano);
exit(EXIT_FAILURE);
}
c->tamano++;
incrementar(&(c->final));
c->vector[c->final] = x;
}
tipo_elemento primero(cola c) {
if (cola_vacia(c)) {
printf("error: cola vacian"); exit(EXIT_FAILURE);
}
return(c.vector[c.cabeza]);
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: colas.c (iii)
tipo_elemento quitar_primero(cola *c) {
tipo_elemento x;
if (cola_vacia(*c)) {
printf("error: cola vacian");
exit(EXIT_FAILURE);
}
c->tamano--;
x = c->vector[c->cabeza];
incrementar(&(c->cabeza));
return x;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
´Indice
1 Pilas
2 Colas
3 Listas
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Listas
Operaciones b´asicas:
Visualizar su contenido.
Buscar la posici´on de la primera ocurrencia de un elemento.
Insertar y Eliminar un elemento en alguna posici´on.
Buscar k esimo, que devuelve el elemento
de la posici´on indicada
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on de listas a base de vectores
Tiene que declararse el tama˜no de la lista.
Exige sobrevaloraci´on.
Consume mucho espacio.
Complejidad computacional de las operaciones:
Buscar k esimo, tiempo constante
Visualizar y Buscar, tiempo lineal.
Insertar y Eliminar son costosas.
Insertar o eliminar un elemento exige, en promedio,
desplazar la mitad de los valores, O(n).
La construcci´on de una lista o la eliminaci´on
de todos sus elementos podr´ıa exigir un tiempo cuadr´atico.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on de listas a base de apuntadores
Cada nodo apunta al siguiente; el ´ultimo no apunta a nada.
La lista es un puntero al primer nodo (y al ´ultimo).
Complejidad computacional de las operaciones:
Visualizar y Buscar, tiempo lineal.
Buscar k esimo, tiempo lineal.
Eliminar realiza un cambio de apuntadores y
una orden dispose, O(1).
Usa Buscar anterior cuyo tiempo de ejecuci´on es lineal.
Insertar tras una posici´on p require una llamada a new y
dos maniobras con apuntadores, O(1).
Buscar la posici´on p podr´ıa llevar tiempo lineal.
Un nodo cabecera facilita la inserci´on y la eliminaci´on al comienzo
de la lista.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Implementaci´on de listas doblemente enlazadas
Cada nodo apunta al siguiente y al anterior.
Duplica el uso de la memoria necesaria para los punteros.
Duplica el coste de manejo de punteros al insertar y eliminar.
La eliminaci´on se simplifica.
No es necesario buscar el elemento anterior.
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on con un nodo cabecera (i)
tipo PNodo = puntero a Nodo
Lista = PNodo
Posici´on = PNodo
Nodo = registro
Elemento : Tipo_de_elemento
Siguiente : PNodo
fin registro
procedimiento Crear Lista ( L )
nuevo ( tmp );
si tmp = nil entonces error Memoria agotada
sino
tmpˆ.Elemento := { nodo cabecera };
tmpˆ.Siguiente := nil;
L := tmp
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on con un nodo cabecera (ii)
funci´on Lista Vac´ıa ( L ) : test
devolver Lˆ.Siguiente = nil
fin funci´on
funci´on Buscar ( x, L ) : posici´on de la 1a ocurrencia
o nil
p := Lˆ.Siguiente;
mientras p <> nil y pˆ.Elemento <> x hacer
p := pˆ.Siguiente;
devolver p
fin funci´on
funci´on ´Ultimo Elemento ( p ) : test { privada }
devolver pˆ.Siguiente = nil
fin funci´on
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on con un nodo cabecera (iii)
funci´on Buscar Anterior ( x, L ) : posici´on anterior a x
o a nil { privada }
p := L;
mientras pˆ.Siguiente <> nil y
pˆ.Siguienteˆ.Elemento <> x hacer
p := pˆ.Siguiente;
devolver p
fin funci´on
procedimiento Eliminar ( x, L )
p := Buscar Anterior ( x, L );
si ´Ultimo Elemento ( p ) entonces error No encontrado
sino tmp := pˆ.Siguiente;
pˆ.Siguiente := tmpˆ.Siguiente;
liberar ( tmp )
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Pseudoc´odigo: Implementaci´on con un nodo cabecera (iv)
procedimiento Insertar ( x, L, p )
nuevo ( tmp ); { Inserta despu´es de la posici´on p }
si tmp = nil entonces
error Memoria agotada
sino
tmpˆ.Elemento := x;
tmpˆ.Siguiente := pˆ.Siguiente:
pˆ.Siguiente := tmp
fin procedimiento
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: listas.h
typedef int tipo_elemento;
struct nodo {
tipo_elemento elemento;
struct nodo * siguiente;
};
typedef struct nodo *pnodo;
typedef pnodo lista;
void crear_lista(lista *);
int lista_vacia(lista);
pnodo buscar(tipo_elemento, lista);
int ultimo_elemento(pnodo);
void eliminar(tipo_elemento, lista *);
void insertar(tipo_elemento, lista *, pnodo);
/* ERRORES: eliminar un elemento que no esta en la lista */
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: listas.c (i)
#include <stdlib.h>
#include <stdio.h>
#include "listas.h"
void crear_lista(lista *l){
pnodo tmp = (pnodo) malloc(sizeof(struct nodo));
if (tmp == NULL) {
printf("memoria agotadan");
exit(EXIT_FAILURE);
}
tmp->siguiente = NULL;
*l = tmp;
}
int lista_vacia(lista l){
return (l->siguiente == NULL);
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: listas.c (ii)
pnodo buscar(tipo_elemento x, lista l){
pnodo p = l->siguiente;
while (p != NULL && p->elemento != x)
p = p->siguiente;
return p;
}
int ultimo_elemento(pnodo p) { /* privada */
return (p->siguiente == NULL);
}
pnodo buscar_anterior(tipo_elemento x, lista l) {/*privada*/
pnodo p = l;
while (p->siguiente != NULL && p->siguiente->elemento !=x)
p = p->siguiente;
return p;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: listas.c (iii)
void eliminar(tipo_elemento x, lista *l) {
pnodo tmp, p = buscar_anterior(x, *l);
if (ultimo_elemento(p)) {
printf("no encontrado: %dn", x);
exit(EXIT_FAILURE);
}
tmp = p->siguiente;
p->siguiente = tmp->siguiente;
free(tmp);
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
C´odigo C: listas.c (iv)
void insertar(tipo_elemento x, lista *l, pnodo p) {
pnodo tmp = (pnodo) malloc(sizeof(struct nodo));
if (tmp == NULL) {
printf("memoria agotadan");
exit(EXIT_FAILURE);
}
tmp->elemento = x;
tmp->siguiente = p->siguiente;
p->siguiente = tmp;
}
Algoritmos Pilas, Colas, Listas
Pilas
Colas
Listas
Algoritmos Pilas, Colas, Listas

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

test access 2010
test access 2010test access 2010
test access 2010
 
Solucion evaluacion conocimientos previos
Solucion evaluacion conocimientos previosSolucion evaluacion conocimientos previos
Solucion evaluacion conocimientos previos
 
Cuestionario 1
Cuestionario 1Cuestionario 1
Cuestionario 1
 
Capitulo 1 cuestionario de access relaciones entre tablas
Capitulo 1 cuestionario de access relaciones entre tablasCapitulo 1 cuestionario de access relaciones entre tablas
Capitulo 1 cuestionario de access relaciones entre tablas
 
Evaluación excel
Evaluación excelEvaluación excel
Evaluación excel
 
Cuestionario 1: Base de datos elementos básicos de Access 2012
Cuestionario 1: Base de datos elementos básicos de Access 2012Cuestionario 1: Base de datos elementos básicos de Access 2012
Cuestionario 1: Base de datos elementos básicos de Access 2012
 
Programa para suma y multiplicacion fer
Programa para suma y multiplicacion ferPrograma para suma y multiplicacion fer
Programa para suma y multiplicacion fer
 
Sqlconsultasmscomplejas 1212077755475220-8
Sqlconsultasmscomplejas 1212077755475220-8Sqlconsultasmscomplejas 1212077755475220-8
Sqlconsultasmscomplejas 1212077755475220-8
 
Graficando funciones cuadraticas en geogebra
Graficando funciones cuadraticas en geogebraGraficando funciones cuadraticas en geogebra
Graficando funciones cuadraticas en geogebra
 
Bases de datos temas examen
Bases de datos temas examenBases de datos temas examen
Bases de datos temas examen
 
Nathaly 2
Nathaly  2Nathaly  2
Nathaly 2
 
Sirley y nathaly
Sirley y nathalySirley y nathaly
Sirley y nathaly
 
Programa que multiplica y suma
Programa que multiplica y sumaPrograma que multiplica y suma
Programa que multiplica y suma
 
Jimakawarygrosso
JimakawarygrossoJimakawarygrosso
Jimakawarygrosso
 
Mini quiz
Mini quizMini quiz
Mini quiz
 
Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)Algoritmos 50 ejemplos (1)
Algoritmos 50 ejemplos (1)
 
Prueba practica de estadística angel saldivia
Prueba practica de estadística angel saldiviaPrueba practica de estadística angel saldivia
Prueba practica de estadística angel saldivia
 

Destacado

Estructura dedatos
Estructura dedatosEstructura dedatos
Estructura dedatos
Jorge
 
Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptual
ereinoso43
 
Exposicion grupo nro 1 de la militaridad
Exposicion grupo nro 1 de la militaridadExposicion grupo nro 1 de la militaridad
Exposicion grupo nro 1 de la militaridad
armando1957
 
Aplicaciones a aspectos pragmáticos2011
Aplicaciones a aspectos pragmáticos2011Aplicaciones a aspectos pragmáticos2011
Aplicaciones a aspectos pragmáticos2011
cucuki88
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
chrisflores001
 
18 Arboles Como Estructura De Busqueda
18 Arboles Como Estructura De Busqueda18 Arboles Como Estructura De Busqueda
18 Arboles Como Estructura De Busqueda
UVM
 

Destacado (20)

Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Estructura de datos, pilas, árboles, colas, listas
Estructura de datos, pilas, árboles, colas, listasEstructura de datos, pilas, árboles, colas, listas
Estructura de datos, pilas, árboles, colas, listas
 
Arboles
ArbolesArboles
Arboles
 
ESTRUCTURAS DE DATOS FUNDAMENTALES
ESTRUCTURAS DE DATOS FUNDAMENTALESESTRUCTURAS DE DATOS FUNDAMENTALES
ESTRUCTURAS DE DATOS FUNDAMENTALES
 
colas de prioridad
colas de prioridad colas de prioridad
colas de prioridad
 
Tipos De Datos Abstractos
Tipos De Datos AbstractosTipos De Datos Abstractos
Tipos De Datos Abstractos
 
PresentacióN1 Marina Leticia
PresentacióN1 Marina LeticiaPresentacióN1 Marina Leticia
PresentacióN1 Marina Leticia
 
Listas pilas colas
Listas pilas colasListas pilas colas
Listas pilas colas
 
Yulexi
YulexiYulexi
Yulexi
 
Estructura dedatos
Estructura dedatosEstructura dedatos
Estructura dedatos
 
Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptual
 
Exposicion grupo nro 1 de la militaridad
Exposicion grupo nro 1 de la militaridadExposicion grupo nro 1 de la militaridad
Exposicion grupo nro 1 de la militaridad
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en Java
 
proyecto de estructura de datos
proyecto de estructura de datosproyecto de estructura de datos
proyecto de estructura de datos
 
Algoritmos y Estructuras de Datos
Algoritmos y Estructuras de DatosAlgoritmos y Estructuras de Datos
Algoritmos y Estructuras de Datos
 
Aplicaciones a aspectos pragmáticos2011
Aplicaciones a aspectos pragmáticos2011Aplicaciones a aspectos pragmáticos2011
Aplicaciones a aspectos pragmáticos2011
 
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10
 
18 Arboles Como Estructura De Busqueda
18 Arboles Como Estructura De Busqueda18 Arboles Como Estructura De Busqueda
18 Arboles Como Estructura De Busqueda
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 

Similar a Pilas colas listas

Clase 9- programacion
Clase 9- programacionClase 9- programacion
Clase 9- programacion
diego MC
 
ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++
die_dex
 
Biblioteca java.util por gio
Biblioteca java.util por gioBiblioteca java.util por gio
Biblioteca java.util por gio
Robert Wolf
 
Pres arreglosmat animacion
Pres arreglosmat animacionPres arreglosmat animacion
Pres arreglosmat animacion
JLAntonio
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Videoconferencias UTPL
 

Similar a Pilas colas listas (20)

Tema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listasTema 2.1 -_pilas,_colas_y_listas
Tema 2.1 -_pilas,_colas_y_listas
 
Pilas colas
Pilas colasPilas colas
Pilas colas
 
Clase 9- programacion
Clase 9- programacionClase 9- programacion
Clase 9- programacion
 
ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++
 
Luis Gamboa
Luis  GamboaLuis  Gamboa
Luis Gamboa
 
Práctica 12
Práctica 12Práctica 12
Práctica 12
 
Arreglos y matrices
Arreglos y matricesArreglos y matrices
Arreglos y matrices
 
Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)Tema 4 - Tipos datos avanzados (I)
Tema 4 - Tipos datos avanzados (I)
 
arreglos y matrices
arreglos  y matricesarreglos  y matrices
arreglos y matrices
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Biblioteca java.util por gio
Biblioteca java.util por gioBiblioteca java.util por gio
Biblioteca java.util por gio
 
Arreglos
ArreglosArreglos
Arreglos
 
Pres arreglosmat animacion
Pres arreglosmat animacionPres arreglosmat animacion
Pres arreglosmat animacion
 
Tema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdfTema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdf
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
7.arreglos en java
7.arreglos en  java7.arreglos en  java
7.arreglos en java
 
06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
Trabajar en el sector agroalimentario aragonés con datos y portales de datos ...
 
Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
 

Último

Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
JonathanCovena1
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Francisco158360
 

Último (20)

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 

Pilas colas listas

  • 1. Pilas Colas Listas Estructuras de datos: Pilas, Colas, Listas Algoritmos Dep. de Computaci´on - Fac. de Inform´atica Universidad de A Coru˜na J. Santiago Jorge sjorge@udc.es Algoritmos Pilas, Colas, Listas
  • 2. Pilas Colas Listas ´Indice 1 Pilas 2 Colas 3 Listas Algoritmos Pilas, Colas, Listas
  • 3. Pilas Colas Listas Referencias bibliogr´aficas M. A. Weiss. Listas, pilas y colas. En Estructuras de datos y algoritmos, cap´ıtulo 3, p´aginas 45–92. Addison-Wesley Iberoamericana, 1995. R. Pe˜na Mar´ı. Implementaci´on de estructuras de datos. En Dise˜no de Programas. Formalismo y abstracci´on, cap´ıtulo 7, p´aginas 257–290. Prentice Hall, segunda edici´on, 1998. G. Brassard y T. Bratley. Estructura de datos. En Fundamentos de algoritmia, cap´ıtulo 5, p´aginas 167–210. Prentice Hall, 1997. Algoritmos Pilas, Colas, Listas
  • 4. Pilas Colas Listas ´Indice 1 Pilas 2 Colas 3 Listas Algoritmos Pilas, Colas, Listas
  • 5. Pilas Colas Listas Pilas Acceso limitado al ´ultimo elemento insertado Operaciones b´asicas: apilar, desapilar y cima. desapilar o cima en una pila vac´ıa es un error en el TDA pila. Quedarse sin espacio al apilar es un error de implementaci´on. Cada operaci´on deber´ıa tardar una cantidad constante de tiempo en ejecutarse. Con independencia del n´umero de elementos apiladas. Algoritmos Pilas, Colas, Listas
  • 6. Pilas Colas Listas Pseudoc´odigo: Implementaci´on a base de vectores (i) tipo Pila = registro Cima_de_pila : 0..Tama˜no_m´aximo_de_pila Vector_de_pila : vector [1..Tama˜no_m´aximo_de_pila] de Tipo_de_elemento fin registro procedimiento Crear Pila ( P ) P.Cima_de_pila := 0 fin procedimiento funci´on Pila Vac´ıa ( P ) : test devolver P.Cima_de_pila = 0 fin funci´on Algoritmos Pilas, Colas, Listas
  • 7. Pilas Colas Listas Pseudoc´odigo: Implementaci´on a base de vectores (ii) procedimiento Apilar ( x, P ) si P.Cima_de_pila = Tama˜no_m´aximo_de_pila entonces error Pila llena sino P.Cima_de_pila := P.Cima_de_pila + 1; P.Vector_de_pila[P.Cima_de_pila] := x fin procedimiento funci´on Cima ( P ) : Tipo_de_elemento si Pila Vac´ıa (P) entonces error Pila vac´ıa sino devolver P.Vector_de_pila[P.Cima de Pila] fin funci´on procedimiento Desapilar ( P ) si Pila Vac´ıa (P) entonces error Pila vac´ıa sino P.Cima_de_pila := P.Cima_de_pila - 1 fin procedimiento Algoritmos Pilas, Colas, Listas
  • 8. Pilas Colas Listas C´odigo C: pilas.h #ifndef TAMANO_MAXIMO_PILA #define TAMANO_MAXIMO_PILA 10 #endif typedef int tipo_elemento; typedef struct { int cima; tipo_elemento vector[TAMANO_MAXIMO_PILA]; } pila; void crear_pila(pila *); int pila_vacia(pila); void apilar(tipo_elemento, pila *); tipo_elemento cima(pila); void desapilar(pila *); /* ERRORES: cima o desapilar sobre la pila vac´ıa apilar sobre la pila llena */ Algoritmos Pilas, Colas, Listas
  • 9. Pilas Colas Listas C´odigo C: pilas.c (i) #include <stdlib.h> #include <stdio.h> #include "pilas.h" void crear_pila(pila *p) { p->cima = -1; } int pila_vacia(pila p) { return (p.cima == -1); } void apilar(tipo_elemento x, pila *p) { if (++p->cima == TAMANO_MAXIMO_PILA) { printf("error: pila llenan"); exit(EXIT_FAILURE); } p->vector[p->cima] = x; } Algoritmos Pilas, Colas, Listas
  • 10. Pilas Colas Listas C´odigo C: pilas.c (ii) tipo_elemento cima(pila p) { if (pila_vacia(p)) { printf("error: pila vacian"); exit(EXIT_FAILURE); } return p.vector[p.cima]; } void desapilar(pila *p) { if (pila_vacia(*p)) { printf("error: pila vacian"); exit(EXIT_FAILURE); } p->cima--; } Algoritmos Pilas, Colas, Listas
  • 11. Pilas Colas Listas ´Indice 1 Pilas 2 Colas 3 Listas Algoritmos Pilas, Colas, Listas
  • 12. Pilas Colas Listas Colas Operaciones b´asicas: insertar, quitarPrimero y primero. Cada rutina deber´ıa ejecutarse en tiempo constante. Algoritmos Pilas, Colas, Listas
  • 13. Pilas Colas Listas Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza Algoritmos Pilas, Colas, Listas
  • 14. Pilas Colas Listas Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza final 2) Insertar en Cola (a,C) a cabeza Algoritmos Pilas, Colas, Listas
  • 15. Pilas Colas Listas Implementaci´on circular a base de vectores (i) La implementaci´on circular devuelve cabeza y fin al principo del vector cuando rebasan la ´ultima posici´on. final 1) Crear Cola (C) cabeza final 2) Insertar en Cola (a,C) a cabeza final 3) Insertar en Cola (b,C) a b cabeza Algoritmos Pilas, Colas, Listas
  • 16. Pilas Colas Listas Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza Algoritmos Pilas, Colas, Listas
  • 17. Pilas Colas Listas Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza Algoritmos Pilas, Colas, Listas
  • 18. Pilas Colas Listas Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza final 6) Quitar Primero (C) b c d cabeza Algoritmos Pilas, Colas, Listas
  • 19. Pilas Colas Listas Implementaci´on circular a base de vectores (i) final 4) Insertar en Cola (c,C) a b c cabeza final 5) Insertar en Cola (d,C) a b c d cabeza final 6) Quitar Primero (C) b c d cabeza final 7) Insertar en Cola (e,C) e b c d cabeza Algoritmos Pilas, Colas, Listas
  • 20. Pilas Colas Listas Pseudoc´odigo (i) tipo Cola = registro Cabeza_de_cola, Final_de_cola: 1..Tama˜no_m´aximo_de_cola Tama˜no_de_cola : 0..Tama˜no_m´aximo_de_cola Vector_de_cola : vector [1..Tama˜no_m´aximo_de_cola] de Tipo_de_elemento fin registro procedimiento Crear_Cola ( C ) C.Tama˜no_de_cola := 0; C.Cabeza_de_cola := 1; C.Final_de_cola := Tama˜no_m´aximo_de_cola fin procedimiento funci´on Cola_Vac´ıa ( C ) : test devolver C.Tama˜no_de_cola = 0 fin funci´on Algoritmos Pilas, Colas, Listas
  • 21. Pilas Colas Listas Pseudoc´odigo (ii) procedimiento incrementar ( x ) (* privado *) si x = Tama˜no_m´aximo_de_cola entonces x := 1 sino x := x + 1 fin procedimiento procedimiento Insertar_en_Cola ( x, C ) si C.Tama˜no_de_Cola = Tama˜no_m´aximo_de_cola entonces error Cola llena sino C.Tama˜no_de_cola := C.Tama˜no_de_cola + 1; incrementar(C.Final_de_cola); C.Vector_de_cola[C.Final_de_cola] := x; fin procedimiento Algoritmos Pilas, Colas, Listas
  • 22. Pilas Colas Listas Pseudoc´odigo (iii) funci´on Quitar_Primero ( C ) : Tipo_de_elemento si Cola_Vac´ıa ( C ) entonces error Cola vac´ıa sino C.Tama˜no_de_cola := C.Tama˜no_de_cola - 1; x := C.Vector_de_cola[C.Cabeza_de_cola]; incrementar(C.Cabeza_de_cola); devolver x fin funci´on funci´on Primero ( C ) : Tipo_de_elemento si Cola_Vac´ıa ( C ) entonces error Cola vac´ıa sino devolver C.Vector_de_cola[C.Cabeza_de_cola] fin funci´on Algoritmos Pilas, Colas, Listas
  • 23. Pilas Colas Listas C´odigo C: colas.h #ifndef TAMANO_MAXIMO_COLA #define TAMANO_MAXIMO_COLA 5 #endif typedef int tipo_elemento; typedef struct { int cabeza, final, tamano; tipo_elemento vector[TAMANO_MAXIMO_COLA]; } cola; void crear_cola(cola *); int cola_vacia(cola); void insertar(tipo_elemento, cola *); tipo_elemento quitar_primero(cola *); tipo_elemento primero(cola); /* ERRORES: quitar_primero o primero sobre una cola vac´ıa insertar en una cola llena */ Algoritmos Pilas, Colas, Listas
  • 24. Pilas Colas Listas C´odigo C: colas.c (i) #include <stdlib.h> #include <stdio.h> #include "colas.h" void crear_cola(cola *c) { c->tamano = 0; c->cabeza = 0; c->final = -1; } int cola_vacia(cola c) { return (c.tamano == 0); } void incrementar(int *x) { /* privado */ if (++(*x) == TAMANO_MAXIMO_COLA) *x = 0; } Algoritmos Pilas, Colas, Listas
  • 25. Pilas Colas Listas C´odigo C: colas.c (ii) void insertar(tipo_elemento x, cola *c) { if (c->tamano == TAMANO_MAXIMO_COLA) { printf("error: cola llena: %dn", c->tamano); exit(EXIT_FAILURE); } c->tamano++; incrementar(&(c->final)); c->vector[c->final] = x; } tipo_elemento primero(cola c) { if (cola_vacia(c)) { printf("error: cola vacian"); exit(EXIT_FAILURE); } return(c.vector[c.cabeza]); } Algoritmos Pilas, Colas, Listas
  • 26. Pilas Colas Listas C´odigo C: colas.c (iii) tipo_elemento quitar_primero(cola *c) { tipo_elemento x; if (cola_vacia(*c)) { printf("error: cola vacian"); exit(EXIT_FAILURE); } c->tamano--; x = c->vector[c->cabeza]; incrementar(&(c->cabeza)); return x; } Algoritmos Pilas, Colas, Listas
  • 27. Pilas Colas Listas ´Indice 1 Pilas 2 Colas 3 Listas Algoritmos Pilas, Colas, Listas
  • 28. Pilas Colas Listas Listas Operaciones b´asicas: Visualizar su contenido. Buscar la posici´on de la primera ocurrencia de un elemento. Insertar y Eliminar un elemento en alguna posici´on. Buscar k esimo, que devuelve el elemento de la posici´on indicada Algoritmos Pilas, Colas, Listas
  • 29. Pilas Colas Listas Implementaci´on de listas a base de vectores Tiene que declararse el tama˜no de la lista. Exige sobrevaloraci´on. Consume mucho espacio. Complejidad computacional de las operaciones: Buscar k esimo, tiempo constante Visualizar y Buscar, tiempo lineal. Insertar y Eliminar son costosas. Insertar o eliminar un elemento exige, en promedio, desplazar la mitad de los valores, O(n). La construcci´on de una lista o la eliminaci´on de todos sus elementos podr´ıa exigir un tiempo cuadr´atico. Algoritmos Pilas, Colas, Listas
  • 30. Pilas Colas Listas Implementaci´on de listas a base de apuntadores Cada nodo apunta al siguiente; el ´ultimo no apunta a nada. La lista es un puntero al primer nodo (y al ´ultimo). Complejidad computacional de las operaciones: Visualizar y Buscar, tiempo lineal. Buscar k esimo, tiempo lineal. Eliminar realiza un cambio de apuntadores y una orden dispose, O(1). Usa Buscar anterior cuyo tiempo de ejecuci´on es lineal. Insertar tras una posici´on p require una llamada a new y dos maniobras con apuntadores, O(1). Buscar la posici´on p podr´ıa llevar tiempo lineal. Un nodo cabecera facilita la inserci´on y la eliminaci´on al comienzo de la lista. Algoritmos Pilas, Colas, Listas
  • 31. Pilas Colas Listas Implementaci´on de listas doblemente enlazadas Cada nodo apunta al siguiente y al anterior. Duplica el uso de la memoria necesaria para los punteros. Duplica el coste de manejo de punteros al insertar y eliminar. La eliminaci´on se simplifica. No es necesario buscar el elemento anterior. Algoritmos Pilas, Colas, Listas
  • 32. Pilas Colas Listas Pseudoc´odigo: Implementaci´on con un nodo cabecera (i) tipo PNodo = puntero a Nodo Lista = PNodo Posici´on = PNodo Nodo = registro Elemento : Tipo_de_elemento Siguiente : PNodo fin registro procedimiento Crear Lista ( L ) nuevo ( tmp ); si tmp = nil entonces error Memoria agotada sino tmpˆ.Elemento := { nodo cabecera }; tmpˆ.Siguiente := nil; L := tmp fin procedimiento Algoritmos Pilas, Colas, Listas
  • 33. Pilas Colas Listas Pseudoc´odigo: Implementaci´on con un nodo cabecera (ii) funci´on Lista Vac´ıa ( L ) : test devolver Lˆ.Siguiente = nil fin funci´on funci´on Buscar ( x, L ) : posici´on de la 1a ocurrencia o nil p := Lˆ.Siguiente; mientras p <> nil y pˆ.Elemento <> x hacer p := pˆ.Siguiente; devolver p fin funci´on funci´on ´Ultimo Elemento ( p ) : test { privada } devolver pˆ.Siguiente = nil fin funci´on Algoritmos Pilas, Colas, Listas
  • 34. Pilas Colas Listas Pseudoc´odigo: Implementaci´on con un nodo cabecera (iii) funci´on Buscar Anterior ( x, L ) : posici´on anterior a x o a nil { privada } p := L; mientras pˆ.Siguiente <> nil y pˆ.Siguienteˆ.Elemento <> x hacer p := pˆ.Siguiente; devolver p fin funci´on procedimiento Eliminar ( x, L ) p := Buscar Anterior ( x, L ); si ´Ultimo Elemento ( p ) entonces error No encontrado sino tmp := pˆ.Siguiente; pˆ.Siguiente := tmpˆ.Siguiente; liberar ( tmp ) fin procedimiento Algoritmos Pilas, Colas, Listas
  • 35. Pilas Colas Listas Pseudoc´odigo: Implementaci´on con un nodo cabecera (iv) procedimiento Insertar ( x, L, p ) nuevo ( tmp ); { Inserta despu´es de la posici´on p } si tmp = nil entonces error Memoria agotada sino tmpˆ.Elemento := x; tmpˆ.Siguiente := pˆ.Siguiente: pˆ.Siguiente := tmp fin procedimiento Algoritmos Pilas, Colas, Listas
  • 36. Pilas Colas Listas C´odigo C: listas.h typedef int tipo_elemento; struct nodo { tipo_elemento elemento; struct nodo * siguiente; }; typedef struct nodo *pnodo; typedef pnodo lista; void crear_lista(lista *); int lista_vacia(lista); pnodo buscar(tipo_elemento, lista); int ultimo_elemento(pnodo); void eliminar(tipo_elemento, lista *); void insertar(tipo_elemento, lista *, pnodo); /* ERRORES: eliminar un elemento que no esta en la lista */ Algoritmos Pilas, Colas, Listas
  • 37. Pilas Colas Listas C´odigo C: listas.c (i) #include <stdlib.h> #include <stdio.h> #include "listas.h" void crear_lista(lista *l){ pnodo tmp = (pnodo) malloc(sizeof(struct nodo)); if (tmp == NULL) { printf("memoria agotadan"); exit(EXIT_FAILURE); } tmp->siguiente = NULL; *l = tmp; } int lista_vacia(lista l){ return (l->siguiente == NULL); } Algoritmos Pilas, Colas, Listas
  • 38. Pilas Colas Listas C´odigo C: listas.c (ii) pnodo buscar(tipo_elemento x, lista l){ pnodo p = l->siguiente; while (p != NULL && p->elemento != x) p = p->siguiente; return p; } int ultimo_elemento(pnodo p) { /* privada */ return (p->siguiente == NULL); } pnodo buscar_anterior(tipo_elemento x, lista l) {/*privada*/ pnodo p = l; while (p->siguiente != NULL && p->siguiente->elemento !=x) p = p->siguiente; return p; } Algoritmos Pilas, Colas, Listas
  • 39. Pilas Colas Listas C´odigo C: listas.c (iii) void eliminar(tipo_elemento x, lista *l) { pnodo tmp, p = buscar_anterior(x, *l); if (ultimo_elemento(p)) { printf("no encontrado: %dn", x); exit(EXIT_FAILURE); } tmp = p->siguiente; p->siguiente = tmp->siguiente; free(tmp); } Algoritmos Pilas, Colas, Listas
  • 40. Pilas Colas Listas C´odigo C: listas.c (iv) void insertar(tipo_elemento x, lista *l, pnodo p) { pnodo tmp = (pnodo) malloc(sizeof(struct nodo)); if (tmp == NULL) { printf("memoria agotadan"); exit(EXIT_FAILURE); } tmp->elemento = x; tmp->siguiente = p->siguiente; p->siguiente = tmp; } Algoritmos Pilas, Colas, Listas